python - PySpark:迭代 PairRDD 中的值

标签 python apache-spark pyspark

如何迭代 RDD 中的值(键,值)。

tsRDD.map(lambda x:(x,1)).groupByKey()

返回

[('abc', <pyspark.resultiterable.ResultIterable object at 0xb0e8242c>),
 ('pqr', <pyspark.resultiterable.ResultIterable object at 0xb0e82a2c>),
 ('xyz', <pyspark.resultiterable.ResultIterable object at 0xb0e824ac>)]

我想迭代 <pyspark.resultiterable.ResultIterable对象并找到其所有元素的总和。

我试过了

tsRDD.map(lambda x:(x,1))).countByKey().items()

返回

`[('abc', 2), ('pqr', 1), ('xyz', 2)]`

但我需要使用.map .reduceByKey()方法

有什么想法吗?或者我们可以做一些变化?

最佳答案

在这种特殊情况下,您可以做的最有效的事情就是使用 reduceByKey而不是groupByKey:

tsRDD.map(lambda x:(x, 1)).reduceByKey(lambda x, y: x + y)

一般情况下,当您拥有PairwiseRDD时,您可以map

# Python 2
someRDD.map(lambda (k, vs): do_something_with(vs))

# Python 3 
someRDD.map(lambda kvs: do_something_wit(kvs[1]))

mapValues:

someRDD.mapValues(lambda vs: do_something_with(vs))

关于python - PySpark:迭代 PairRDD 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31137960/

相关文章:

apache-spark - Spark and Hive in Hadoop 3 : Difference between metastore. catalog.default and spark.sql.catalogImplementation

python - 比较两列以在 Spark DataFrame 中创建新列

dataframe - Spark : Iterating through columns in each row to create a new dataframe

python - 如何将所有特征输入到一个向量列中

python - 旋转 X 标签未安装在图形区域中

python - 使用requests和multiprocessing时的奇怪问题

apache-spark - SparkSQL如何对时间字段进行加减

apache-spark - Spark 线性回归特征哈希

python - PyQt- 哪一列获得了右键单击?

python - 将函数应用于 2D numpy 数组元素