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

使用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:

  • 我尝试使用Apache POI(3.15-Beta2版本,但也尝试过3.14)在XLSX电子表格中的现有表中添加列。使用下面的代码,我设法添加了一列,但它不能完全工作。 Excel 2013在尝试打开文件时出错(我们发现“....XLSX”中的某些内容有问题。是否希望我们尽可能多地恢复?如果信任此工作簿的来源,请单击是。)。如果单击“是”,文件将被打开,表的大小已经成功调整,新内容也被添加,但是列