运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

scala – 折叠Spark DataFrame

运维开发网 https://www.qedev.com 2020-07-10 18:49 出处:网络 作者:运维开发网整理
我正在使用Spark和 Scala. Spark版本1.5和我正在尝试将具有名称值组合的输入数据帧转换为新数据帧,其中所有名称都要转换为列,值作为行转换. I / P DataFrame: ID Name Value 1 Country US 2 Country US 2 State NY 3 Country UK 4 Country India
我正在使用Spark和 Scala. Spark版本1.5和我正在尝试将具有名称值组合的输入数据帧转换为新数据帧,其中所有名称都要转换为列,值作为行转换.

I / P DataFrame:

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

转置的DataFrame

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创建一个包含三个DataFrame的列表,其中每个表包含仅包含单个名称的记录.接下来,我们使用左外连接简化减少此列表.所以把它们放在一起就可以得到这样的东西:

(left-outer-join
  (left-outer-join 
    (where df (=== name "Country"))
    (where df (=== name "State")))
  (where df (=== name "County")))

注意:如果您使用Spark> = 1.6与Python或Scala,或Spark> = 2.0与R,请使用pivot with first:

> Reshaping/Pivoting data in Spark RDD and/or Spark DataFrames

> How to pivot DataFrame?

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消