【问题标题】:How to Map one rdd to another with Pyspark?如何使用 Pyspark 将一个 rdd 映射到另一个?
【发布时间】:2018-03-19 15:49:31
【问题描述】:

我有rdd1 有labels(0,1,4) 和另一个rdd2 有文字。我想将rdd1 与rdd2 映射,这样rdd1 的row1 与rdd2 的row1 映射等等。

我试过了:

rdd2.join(rdd1.map(lambda x: (x[0], x[0:])))

它给了我错误:

RDD is empty.

有人可以在这里指导我吗? 示例输出:rdd1- labels & rdd2-Text

rdd1       rdd2

0   i hate painting i have white paint all over my hands.

0   Bawww I need a haircut  No1 could fit me in before work tonight. Sigh.

4   I had a great day

1   what is life.

4   He sings so good

1   i need to go to sleep  ....goodnight

Sample output

【问题讨论】:

  • 0,1,4 在同一行吗? rdd2 的值是多少?你的预期输出是什么?
  • rdd2 有文字。我想将预测标签从 rdd1 映射到 rdd2 对应地从 row1。不同的行有不同的标签。 0,1,4是三个类别
  • 您能否通过提供示例 rdd2 和预期输出来进一步澄清一下?
  • 以下是我正在寻找的输出: rdd1 rdd2 0 我讨厌绘画我的手上全是白漆 1 什么是生活? 0 我需要一部新手机.....我也要去睡觉了!明天尤威学校。 4 我度过了非常美好的一天 0 Blah,我想该睡觉了。早上看到我的朋友们回到俄亥俄州 1 我要睡觉了....晚安
  • @RahulAnand 你能edit你的问题并将示例输出作为格式化代码发布吗?很难解读为评论。

标签: apache-spark pyspark rdd


【解决方案1】:

如果你有rdd1作为

val rdd1 = sc.parallelize(List(0,0,4,1,4,1))

和rdd2 一样

val rdd2 = sc.parallelize(List("i hate painting i have white paint all over my hands.",
  "Bawww I need a haircut  No1 could fit me in before work tonight. Sigh.",
  "I had a great day",
  "what is life.",
  "He sings so good",
  "i need to go to sleep  ....goodnight"))

我想将 rdd1 与 rdd2 映射,这样 rdd1 的第 1 行与 rdd2 的第 1 行映射,依此类推。

使用 zip 功能

一个简单的zip 函数应该可以满足你的要求

rdd1.zip(rdd2)

这会给你输出

(0,i hate painting i have white paint all over my hands.)
(0,Bawww I need a haircut  No1 could fit me in before work tonight. Sigh.)
(4,I had a great day)
(1,what is life.)
(4,He sings so good)
(1,i need to go to sleep  ....goodnight)

zipWithIndex 并加入

这种方法会得到与上面使用zip 解释的相同的输出(而且这种方法也很昂贵)

rdd1.zipWithIndex().map(_.swap).join(rdd2.zipWithIndex().map(_.swap)).map(_._2)

希望回答对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多