加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 折叠Spark DataFrame

发布时间:2020-12-16 18:14:16 所属栏目:安全 来源:网络整理
导读:我正在使用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
我正在使用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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读