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 进行转换
如何使用 Scala/Spark 添加不基于数据框中现有列的新列? [复制]