如何在Scala中将几个数据框组合在一起?

时间:2018-07-12 20:46:53

标签: scala apache-spark dataframe

我有几个数据框,其中包含单个列。假设我有4个这样的数据框,且只有一列。如何将所有元素组合在一起形成一个数据框?

val df = xmldf.select(col("UserData.UserValue._valueRef"))
val df2 = xmldf.select(col("UserData.UserValue._title"))
val df3 = xmldf.select(col("author"))
val df4 = xmldf.select(col("price"))

要结合使用,我正在尝试此操作,但这不起作用:

var newdf = df
newdf = newdf.withColumn("col1",df1.col("UserData.UserValue._title"))
newdf.show()

错误地指出一列的字段不在另一列中。我不确定如何将这四个数据帧组合在一起。他们没有任何共同的专栏。

df2看起来像这样:

+---------------+
|         _title|
+---------------+
|_CONFIG_CONTEXT|
|_CONFIG_CONTEXT|
|_CONFIG_CONTEXT|
+---------------+

和df看起来像这样:

+-----------+
|_valuegiven|
+-----------+
|        qwe|
|     dfdfrt|
|       dfdf|
+-----------+

df3和df4的格式也相同。我想要下面的数据框:

+-----------+---------------+
|_valuegiven|         _title|
+-----------+---------------+
|        qwe|_CONFIG_CONTEXT|
|     dfdfrt|_CONFIG_CONTEXT|
|       dfdf|_CONFIG_CONTEXT|
+-----------+---------------+

我用了这个:

val newdf = xmldf.select(col("UserData.UserValue._valuegiven"),col("UserData.UserValue._title") )
newdf.show()

但是我正在旅途中获取列名,因此,我需要在旅途中追加,因为我不知道我将获得多少列。这就是为什么我不能使用上面的命令的原因。

3 个答案:

答案 0 :(得分:0)

您的目标还不太清楚。如果要求加入这些数据框,但也许您只想选择这4列。

val newdf = xmldf.select($"UserData.UserValue._valueRef", $"UserData.UserValue._title", 'author,'price")
newdf.show

如果您真的想加入所有这些数据框,则需要将它们全部加入并选择适当的字段。

答案 1 :(得分:0)

如果目标是将xmldf中的4列放入一个新的数据帧中,则不应首先将其拆分为4个数据帧。

您可以通过在select函数中提供其他列名称来从数据框中选择多个列。

val newdf = xmldf.select(
    col("UserData.UserValue._valueRef"), 
    col("UserData.UserValue._title"),
    col("author"), 
    col("price"))
newdf.show()

答案 2 :(得分:0)

所以我研究了各种方法,最后Ram Ghadiyaram's answer in Solution 2做了我想做的事情。使用这种方法,您可以在旅途中合并任意数量的列。基本上,您需要创建索引,通过该索引可以将数据框连接在一起,并在连接后完全删除索引列。