繁体   English   中英

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

[英]Adding new column using existing one using Spark Scala

嗨,我想使用 DataFrame 的每一行中的现有列添加新列,我正在像这样在 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)
    }) 

但这给出的错误是日食本身

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

请帮忙。

函数对象中的concat_ws可以提供帮助。

此代码添加了docid字段

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

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

通过使用UDF和withColumn Api,可以以更好的方式完成此操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM