gpt4 book ai didi

scala - 折叠 Spark 数据帧

转载 作者:行者123 更新时间:2023-12-04 19:47:00 25 4
gpt4 key购买 nike

我正在使用 Spark 与 Scala .星火版 1.5 我正在尝试将具有名称值组合的输入数据帧转换为一个新的数据帧,其中所有名称都被转换为列和值作为行。

I/P 数据帧:

ID  Name    Value  
1 Country US
2 Country US
2 State NY
3 Country UK
4 Country India
4 State MH
5 Country US
5 State NJ
5 County Hudson

Link here for image

转置数据帧

ID  Country State   County  
1 US NULL NULL
2 US NY NULL
3 UK NULL NULL
4 India MH NULL
5 US NJ Hudson

Link to transposed image
似乎pivot 在这个用例中会有所帮助,但它在spark 1.5.x 版本中不受支持。

任何指示/帮助?

最佳答案

这是一个非常丑陋的数据,但您始终可以过滤和加入:

val names = Seq("Country", "State", "County")

names.map(name =>
df.where($"Name" === name).select($"ID", $"Value".alias("name"))
).reduce((df1, df2) => df1.join(df2, Seq("ID"), "leftouter"))
map创建三个列表 DataFrames其中每个表包含仅包含一个名称的记录。接下来我们简单地 reduce此列表使用左外连接。所以把它们放在一起你会得到这样的东西:
(left-outer-join
(left-outer-join
(where df (=== name "Country"))
(where df (=== name "State")))
(where df (=== name "County")))

备注 :如果你在 Python 或 Scala 中使用 Spark >= 1.6,或者在 R 中使用 Spark >= 2.0,只需将 pivot 与 first 一起使用:
  • Reshaping/Pivoting data in Spark RDD and/or Spark DataFrames
  • How to pivot DataFrame?
  • 关于scala - 折叠 Spark 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35738419/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com