Python 如何计算spark RDD中出现的次数并将其作为字典返回?

Python 如何计算spark RDD中出现的次数并将其作为字典返回?,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,我将csv文件作为数据帧加载,并将其转换为RDD。此RDD包含[纽约、纽约、纽约、洛杉矶、洛杉矶、底特律、迈阿密]等城市的列表。我希望能够提取每个城市的频率,如下所示: 纽约:3 洛杉矶:3 底特律:1 迈阿密:1 我知道我可以用dataframe函数来实现这一点,但我需要专门用RDD函数来实现,比如map、filter等 以下是我迄今为止所做的尝试: df= spark.read.format("csv").option("header"

我将csv文件作为数据帧加载,并将其转换为RDD。此RDD包含[纽约、纽约、纽约、洛杉矶、洛杉矶、底特律、迈阿密]等城市的列表。我希望能够提取每个城市的频率,如下所示:

纽约:3 洛杉矶:3 底特律:1 迈阿密:1

我知道我可以用dataframe函数来实现这一点,但我需要专门用RDD函数来实现,比如map、filter等

以下是我迄今为止所做的尝试:

        df= spark.read.format("csv").option("header", "true").load(filename)
        newRDD = df.rdd.map(lambda x: x[6]).filter(lambda x: x!=None)

我刚刚在包含城市的数据框中得到上述代码的第6列

您可以尝试
reduceByKey

>>> df = spark.createDataFrame(["NY","NY","NY","LA","LA","LA","Detroit","Miami"], StringType())
>>> rdd2 = df.rdd.map(lambda x: (x[0],1)).reduceByKey(lambda x, y: x+y)
>>> rdd2.collect()


[('Detroit', 1), ('NY', 3), ('LA', 3), ('Miami', 1)]

谢谢,这很有效!,另一方面,我如何过滤所有无值或空值,比如如果没有,而不是Detroit
df.rdd.filter(lambda x:x.value不是无)
其中
x.value
是列名