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

Spark 数据帧使用 Java 将多个列合并为一个列,并在某行中加入可选列

白宏放
2023-03-14

我有一个火花数据框。我想将多列连接成一列,其中一些行没有concat中提到的一些列

id  mid colA colB
1   1    X     T
2   1    R
3   2          P

如果我使用

df.withColumn("colC", functions.concat("colA","colB")).drop("colA").drop("colB")

它只返回

id  mid  colC
1   1     X
1   1     T
2   1     null
3   2     null

因为输入的第二行和第三行都没有 colA 和 colB 的值

共有1个答案

鱼浩荡
2023-03-14
import org.apache.spark.sql.functions._

df.na.fill("", Seq("colA", "colB"))
 .withColumn("colC", concat(col("colA"), col("colB")))
 类似资料:
  • 我想合并火花中的多个数组类型[字符串类型]列以创建一个数组类型[字符串类型]。为了组合两列,我在这里找到了解决方案: 将Array[string]类型的两个spark sql列合并成一个新的Array[string]列 但是如果我不知道编译时的列数,我该如何进行组合呢?在运行时,我将知道所有要组合的列的名称。 一种选择是使用上面stackoverflow问题中定义的UDF,在循环中多次添加两列。但

  • 我有一个数据帧: 现在我想把它转换成一个新的数据帧,比如 我怎样才能用熊猫做到这一点?

  • 如何将一个数据帧中的多列(比如3列)组合成一个列(在一个新的数据帧中),其中每一行都成为一个Spark DenseVector?类似于这个线程,但在Java中,有一些下面提到的调整。 我试着用这样的UDF: 然后注册UDF: 其中<code>数据类型<code>为: 当我在一个有3列的数据帧上调用这个UDF并打印出新数据帧的模式时,我得到如下结果: 这里的问题是,我需要一个向量在外部,而不是在结构

  • 我有两个数据帧,我需要连接一列,如果id包含在第二个数据帧的同一列中,则只从第一个数据帧中获取行: df1: 断续器: 期望输出: 我已经用df1.join(df2("id ")," left ")试过了,但是给我错误:“Dataframe”对象是不可调用的。

  • 我有两个不同列数和行数的CSV文件。第一个CSV文件有M列和N行,第二个文件有H列和G行。一些列具有相同的名称。 null 另外,如果两个CSV文件有两个数据帧,并希望这样做,例如,如果我将第一个CSV加载到中,将第二个加载到中,然后希望合并到,类似于上面的示例。

  • 我有一个带有五列的Spark。我想添加另一列,其值是第一列和第二列的元组。当与with Col列()方法一起使用时,我得到不匹配错误,因为输入不是列类型,而是(列,列)。我想知道在这种情况下,除了在行上运行循环之外是否有解决方案?