使用另一个

时间:2018-06-16 11:55:09

标签: python apache-spark rdd

我是新来的,我在其他问题中没有看到我正在寻找的东西。这很简单,我知道如何在数据帧中做,但不知道在RDD中。我有一个RDD,当然我想要一个新的RDD只替换一个属性(不是文件中的所有属性)。该属性是字符串,它必须是整数。问题是如何改变M' M'用1和' F'例如,数据为:

    ...
    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']

谢谢!

1 个答案:

答案 0 :(得分: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))

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