将带有list列的rdd转换为spark中的多行

mf98qq94  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(372)

嗨,我有一张rdd桌 with case class userInfo(userID: Long, day: String, prodIDList: String) ```
userA, 2016-10-12, [10000, 100001]
userB, 2016-10-13, [9999, 1003]
userC, 2016-10-13, [8888, 1003,2000]

我想把它变成,

userA, 2016-10-12, 10000
userA, 2016-10-12,100001
userB, 2016-10-13,9999
userB, 2016-10-13, 1003
userC, 2016-10-13, 8888
userC, 2016-10-13, 1003
userC, 2016-10-13, 2000

有人知道我如何使用spark中的rdd命令吗??
当我看到spark rdd中相关的post-in-stack-overflow将一行数据Map到多行时,它建议我使用flatmap,但我不知道如何将其应用到我的案例中,因为我是spark初学者。
提前谢谢。
camsedfj

camsedfj1#

试试这个:

val data = sc.parallelize(Array(("userA", "2016-10-12", Array(10000, 100001)),
             ("userB", "2016-10-13", Array(9999, 1003)),
             ("userC", "2016-10-13", Array(8888, 1003,2000))))
val resultRDD = dataRDD.map{ case (a, b, c) => ((a, b), c)
}.flatMapValues(x => x).map{ case ((a, b), c) => (a, b, c)}
mccptt67

mccptt672#

如果您对dataframeapi没有问题,那么可以将rdd转换为dataframe并使用“explode”函数。它会像下面这样。

> import spark.implicits._
> val df = rdd.toDF()
> val exploded = df.withColumn("prodID", explode(col("prodIDList")))

相关问题