我是新来的,我在其他问题中没有看到我正在寻找的东西。这很简单,我知道如何在数据帧中做,但不知道在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']
谢谢!
答案 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))
仅在需要时收集,否则省略。您可以按照说明进行调整。