Spark scala将数据框列复制到新数据框

Posted

技术标签:

【中文标题】Spark scala将数据框列复制到新数据框【英文标题】:Spark scala copying dataframe column to new dataframe 【发布时间】:2017-10-03 14:38:59 【问题描述】:

我有一个已创建架构的空数据框。 我正在尝试将列从新数据帧添加到该数据帧中的 for 循环中的现有列。

k 模式 - |ID|DATE|REPORTID|SUBMITTEDDATE|

for(data <- 0 to range-1)
  val c = df2.select(substring(col("value"), str(data)._2, str(data)._3).alias(str(data)._1)).toDF()
  //c.show()
  k = c.withColumn(str(data)._1, c(str(data)._1))

k.show()

但是 k 数据框只有一列,但它应该使所有 4 列都填充了值。 我认为 for 循环的最后一行是替换数据框中现有的列。

有人可以帮我解决这个问题吗?

谢谢!!

【问题讨论】:

为什么要向空数据框添加列?为什么不能用当前的数据框替换整个数据框? 实际的 df2 数据框只有一列。我必须从 df2 数据框中选择一些子字符串,然后根据他的模式将它们添加到 k 数据框中。所以我创建了一个 val,然后将列添加到其中,然后替换 k 中的现有列 您可以为它添加示例吗?我们无法理解您要做什么。 @VarunChelakara 根据示例, df k 将只有 1 列,因为您只在 df c 中选择一列 [即df2.select() 子句只选择了一个子字符串列],然后您将其分配给 k。 “c.withColumn(str(data)._1, c(str(data)._1))”这一行也令人困惑/冗余。你能举个例子吗? @Bhuvan df2 是一个数据框,其数据位于单列中。我正在尝试将其分成多个列并将其存储在数据框中。因此,元组中提供了新列的模式。所以我读取了元组并创建了一个空的数据框 k。现在我正在遍历 df2 以根据子字符串位置读取列并将它们存储在 k 中,因为它已经具有架构。但是 .withcolumn 应该添加新列。那么除了使用 join 之外,还有其他读取列并将它们添加到 k 的方法吗? 【参考方案1】:

添加您的逻辑和条件并创建新的数据框

val dataframe2 =  dataframe1.select("A","B",C)

【讨论】:

【参考方案2】:

在 spark 中无法将数据帧的几列复制到另一列。 尽管几乎没有其他选择可以达到相同的效果

1. You need to join both the dataframe based on some join condition. 
2. Convert bot the data frame to json and do RDD Union

  val rdd = df1.toJSON.union(df2.toJSON) 
  val dfFinal = spark.read.json(rdd)

【讨论】:

我有一个包含 2 列的数据框 k,当我运行以下代码时,它正在替换数据框中的所有现有列 var c = df2.select(substring(col("value"), str(data)._2, str(data)._3).alias(str(data)._1)).toDF() k = c.withColumn(str(data)._1, c(str(data)._1 )) 您不能迭代数据并将数据添加到数据框。在 spark 中是不可能的。

以上是关于Spark scala将数据框列复制到新数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何截断火花数据框列的值? [复制]

如何使用 Spark 数据框列上的函数或方法使用 Scala 进行转换

更改 Spark 数据框列类型会导致错误

如何使用 Scala/Spark 添加不基于数据框中现有列的新列? [复制]

如何使用scala将特定函数转换为apache spark中的udf函数? [复制]

在 Spark 中将数据框列转换为向量