【问题标题】:Create a new rdd replacing value with another创建一个新的 rdd 替换值
【发布时间】:2018-06-16 11:55:08
【问题描述】:

我是新来的,我没有在其他问题中看到我在寻找什么。这很简单,我知道如何在数据框中执行操作,但在 RDD 中不知道。我有一个 RDD,当然我想要一个新的 RDD 只替换一个属性(不是文件中的所有属性)。该属性是字符串,必须是整数。问题是如何将“M”更改为 1,将“F”更改为 0。例如,数据为:

    ...
    StructField("UserID", IntegerType(), True),
    StructField("Gender", StringType(), True)
    ...

    print(Users_Rdd)
    [u'1::F', u'2::M', u'3::M', u'4::M', u'5::M']

我需要:

    print(new_Users_Rdd)
    [u'1::0', u'2::1', u'3::0', u'4::1', u'5::1']

谢谢!!

【问题讨论】:

  • python 方法与 scala 有点不同,但并非不可克服

标签: python apache-spark rdd


【解决方案1】:

不是 100%,而是明显的指导原则和方法。

val rdd = sc.parallelize(List(("abc", "M"), ("defg", "M"), ("cc", "F")))
val rdd2 = rdd.map{ case (field1, field2) => (field1, if (field2 == "M") 1 else 0) }.collect

返回:

rdd: org.apache.spark.rdd.RDD[(String, String)] = ParallelCollectionRDD[2] at parallelize at command-4459844623723459:1
rdd2: Array[(String, Int)] = Array((abc,1), (defg,1), (cc,0))

收集仅在需要时使用,否则省略。您可以按照说明进行调整。

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 2017-05-14
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多