在Spark Scala中将行转换为多行

问题描述 投票:-1回答:1

我有一个问题,我需要将一行转换为多行。这是基于我具有的另一个映射。我尝试在下面提供示例。

假设我有一个具有以下架构的实木复合地板文件

ColA, ColB, ColC, Size, User

我需要根据查找映射将以上数据聚合到多行中。假设我有一张静态地图

ColA, ColB, Sum(Size)
ColB, ColC, Distinct (User)
ColA, ColC, Sum(Size)

这意味着输入RDD中的一行需要转换为3行。我相信RDD是使用FlatMapPair的方法,但是我不确定该如何进行。

我也可以将列合并为一个键,例如ColA_ColB

感谢您的帮助。如果需要添加更多详细信息,请告诉我。

scala apache-spark rdd
1个回答
0
投票

结果应该只有3列?我的意思是col1,col2,col3(汇总结果)。第二个汇总是不同的用户数? (我认为是)。

如果是这样,您基本上可以创建3个数据框,然后合并它们。某种方式:

val df1 = spark.sql(“选择colA作为col1,colB作为col2,sum(Size)作为colAgg group by colA,colB”)]

val df2 = spark.sql(“选择colB作为col1,colC选择为col2,将Distinct(User)选择为colAgg group by colB,colC”]]

val df3 = spark.sql(“选择colA作为col1,colC作为col2,sum(Size)作为colAgg group by colA,colC”)]

df1.union(df2).union(df3)

© www.soinside.com 2019 - 2024. All rights reserved.