2016-10-24 3 views
1

Привет У меня есть таблица RDD, как (с случаем класса USERINFO (идентификатором пользователя: Long, день: String, prodIDList: String))преобразования RDD с списком столбцов, в несколько строк в Спарк

экс)

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

Каждый имеет идеи, как я могу сделать это с помощью команды RDD в Спарк ??

Когда я смотрю на соответствующую должность в переполнении стека в Spark RDD mapping one row of data into multiple rows

он предлагает мне использовать flatmap, но я не знаю, как применить это к моему делу, потому что я новичок искры.

Заранее спасибо.

ответ

0

Попробуйте это:

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

Благодаря Джон, это то, что я хочу! –

+0

потрясающий! вы можете нажать кнопку «Проверить», чтобы принять это как правильный ответ? Благодарю. – jtitusj

2

Если вы согласны с API-интерфейсами dataframe, вы можете преобразовать RDD в кадр данных и использовать функцию «взорвать». Это будет что-то вроде ниже.

> import spark.implicits._ 
> val df = rdd.toDF() 
> val exploded = df.withColumn("prodID", explode(col("prodIDList"))) 
Смежные вопросы