Lea*_*ner 5 pivot scala dataframe apache-spark apache-spark-sql
我在Scala中使用Spark。在Spark版本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
Run Code Online (Sandbox Code Playgroud)
转置的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
Run Code Online (Sandbox Code Playgroud)
链接到转置后的图像
似乎在这种用例中像数据透视一样会有所帮助,但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"))
Run Code Online (Sandbox Code Playgroud)
map创建一个包含三个的列表DataFrames,其中每个表包含仅包含一个名称的记录。接下来我们reduce使用左外连接简单地列出这个列表。所以把它们放在一起你会得到这样的东西:
(left-outer-join
(left-outer-join
(where df (=== name "Country"))
(where df (=== name "State")))
(where df (=== name "County")))
Run Code Online (Sandbox Code Playgroud)
注意:如果您将 Spark >= 1.6 与 Python 或 Scala 一起使用,或者 Spark >= 2.0 与 R 一起使用,则只需将枢纽与first:
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |