Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用列表列将RDD转换为Spark中的多行_Scala_Apache Spark_Rdd - Fatal编程技术网

Scala 使用列表列将RDD转换为Spark中的多行

Scala 使用列表列将RDD转换为Spark中的多行,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,您好,我有一个类似于的RDD表,带有案例类userInfo(userID:Long,day:String,prodiList:String) 我想把它变成 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 有人

您好,我有一个类似于
的RDD表,带有案例类userInfo(userID:Long,day:String,prodiList:String)

我想把它变成

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命令来实现这一点吗

当我在中查看stack overflow中的相关文章时,它建议我使用flatmap,但我不知道如何将其应用到我的案例中,因为我是spark初学者


提前谢谢

如果您对dataframe API没有问题,可以将RDD转换为dataframe并使用“explode”函数。它将是如下所示

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

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)}

谢谢约翰,这就是我想要的!令人惊叹的!你能点击检查按钮接受这个正确答案吗?谢谢
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)}