开发者社区> 问答> 正文

使用pyspark进行Spark RDD窗口化

有一个Spark RDD,叫做rdd1。它有(key, value)一对,我有一个列表,其元素是一个tuple(key1,key2)。

我想得到一个rdd2,有行`((key1,key2),(rdd1中key1的值,rdd1中key2的值))。

有人能帮助我吗?

RDD1集:

key1, value1,
key2, value2,
key3, value3
数组: [(key1,key2),(key2,key3)]

结果:

(key1,key2),value1,value2
(key2,key3),value2,value3
我试过了

spark.parallize(array).map(lambda x:)

展开
收起
社区小助手 2018-12-11 18:10:40 2376 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    用SCALA和mllib滑动 - 两个实现,有点繁琐,但在这里它是:

    import org.apache.spark.mllib.rdd.RDDFunctions._
    val rdd1 = sc.parallelize(Seq(

              ( "key1", "value1"),
              ( "key2", "value2"),
              ( "key3", "value3"),
              ( "key4", "value4"),
              ( "key5", "value5")
          ))

    val rdd2 = rdd1.sliding(2)
    val rdd3 = rdd2.map(x => (x(0), x(1)))
    val rdd4 = rdd3.map(x => ((x._1._1, x._2._1),x._1._2, x._2._2))
    rdd4.collect
    另外,以下这个当然更好......:

    val rdd5 = rdd2.map{case Array(x,y) => ((x._1, y._1), x._2, y._2)}
    rdd5.collect
    在两种情况下都返回:

    res70: Array[((String, String), String, String)] = Array(((key1,key2),value1,value2), ((key2,key3),value2,value3), ((key3,key4),value3,value4), ((key4,key5),value4,value5))
    我相信满足你的需求,但不是在pyspark。

    在Stack Overflow上,您可以找到pyspark没有RDD等效语句的语句,除非您“自己滚动”。您可以在Pyspark中查看如何使用滑动窗口对时间序列数据转换数据。但是,我建议使用pyspark.sql.functions.lead()和pyspark.sql.functions.lag()来建议数据帧。

    2019-07-17 23:19:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载