当前位置: 首页 > 知识库问答 >
问题:

使用Spark Scala使用现有列添加新列

壤驷阳冰
2023-03-14

大家好,我想在数据帧的每一行中使用现有列添加新列,我正在Spark Scala中尝试这样做。。。df是包含可变列数的数据帧,只能在运行时确定。

// Added new column "docid"
val df_new = appContext.sparkSession.sqlContext.createDataFrame(df.rdd, df.schema.add("docid", DataTypes.StringType))

 df_new.map(x => {
        import appContext.sparkSession.implicits._
      val allVals = (0 to x.size).map(x.get(_)).toSeq
      val values = allVals ++ allVals.mkString("_") 
      Row.fromSeq(values)
    }) 

但这个错误是eclipse本身

  • 无法找到存储在数据集中的类型的编码器。通过导入spark.implicits.支持原始类型(Int,String等)和产品类型(case类)_将在未来版本中添加对其他类型序列化的支持。
  • 方法映射没有足够的参数:(隐式证据7美元:org.apache.spark.sql.编码器[org.apache.spark.sql.行])org.apache.spark.sql.数据集[org.apache.spark.sql.行]。未指定的值参数证据7美元。

请帮忙。

共有1个答案

公西马鲁
2023-03-14

函数对象中的concat_ws会有所帮助。

此代码添加了docid字段

df = df.withColumn("docid", concat_ws("_", df.columns.map(df.col(_)):_*))

假设df的所有列都是字符串。

 类似资料:
  • 我有一个如下的数据框。我需要在现有列的基础上创建一个新列。 输出数据帧看起来像这样 我用来寻找col3的逻辑是如果col1计数 我熟悉如何在sql中实现这一点。但很难找到数据帧DSL的解决方案。任何帮助都将不胜感激。谢谢

  • /spark/python/pyspark/sql/dataframe.py“,第1313行,在withColumn assert isinstance(col,Column)中,”col应该是Column“assertionerror:col应该是Column 如何使用自定义函数或randint函数为列生成随机值?

  • 在我的scala程序中,我有一个dataframe,其中有两列和(类型都为)。除此之外,我有一个先前定义的对象和一些方法和属性。在这里,我想要使用dataframe的当前值和中的属性向dataframe添加一个新列。 例如,如果我有下面的dataframe: 谢谢你。

  • 那么,如何使用PySpark向现有的DataFrame添加一个新列(基于Python vector)呢?

  • 初始数据流: 产生的数据frame: 我通常通过使用以下内容将新列“追加”到dataframe:

  • 本文向大家介绍向Pandas中的现有DataFrame添加新列,包括了向Pandas中的现有DataFrame添加新列的使用技巧和注意事项,需要的朋友参考一下 Pandas 数据框是一种二维数据结构,即,数据以表格的形式在行和列中对齐。可以使用python dict,list和series等创建它。在本文中,我们将看到如何在现有数据框中添加新列。因此,首先让我们使用pandas系列创建一个数据框。