代码之家  ›  专栏  ›  技术社区  ›  CodeHunter

如何在scala中将多个数据帧组合在一起?

  •  0
  • CodeHunter  · 技术社区  · 6 年前

    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()
    

    如果说一列的字段在另一列中不存在,则会出错。我不确定如何将这4个数据帧组合在一起。它们没有任何公共列。

    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 回复  |  直到 6 年前
        1
  •  0
  •   codeaperature    6 年前

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

    如果您真的想连接所有这些数据帧,那么您需要连接它们并选择适当的字段。

        2
  •  0
  •   Michael Chin    6 年前

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

    通过在select函数中提供其他列名,可以从数据帧中选择多个列。

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