Pyspark 计算标记点 RDD 的标签的不同值

Pyspark count distinct values of labels of a Labelled point RDD

我在 Spark 中有一个 labeled point 的 RDD。我想计算标签的所有不同值。我试试

from pyspark.mllib.regression import LabeledPoint

train_data =  sc.parallelize([ LabeledPoint(1.0, [1.0, 0.0, 3.0]),LabeledPoint(2.0, [1.0, 0.0, 3.0]),LabeledPoint(1.0, [1.0, 0.0, 3.0]) ])

train_data.reduceByKey(lambda x : x.label).collect()

但是我明白了

TypeError: 'LabeledPoint' object is not iterable

我使用 Spark 2.1 和 python 2.7。感谢您的帮助。

你只需要将你的 LabeledPoint 转换为键值 RDD,然后按键计数:

spark.version
# u'2.1.1'

from pyspark.mllib.regression import LabeledPoint

train_data =  sc.parallelize([ LabeledPoint(1.0, [1.0, 0.0, 3.0]),LabeledPoint(2.0, [1.0, 0.0, 3.0]),LabeledPoint(1.0, [1.0, 0.0, 3.0]) ])

dd = train_data.map(lambda x: (x.label, x.features)).countByKey()
dd
# {1.0: 2, 2.0: 1}