获取RDD对象中每个列表的长度

时间:2017-11-28 10:02:50

标签: pyspark rdd nested-lists

我有一个RDD对象,如:

x=[[1,2,3],[4,5,6,7],[7,2,6,9,10]..]

我想从中获取一个列表,它等于每个列表中元素的大小:

y=[3,4,5..]

Where 3=len([1,2,3], 4=len([4,5,6,7]), 5=len([7,2,6,9,10])...

此语法适用于Python:

[ len(y) for y in yourlist ],如何迭代RDD

2 个答案:

答案 0 :(得分:2)

您只需在RDD中执行map操作:

x = [[1,2,3], [4,5,6,7], [7,2,6,9,10]]
rdd = sc.parallelize(x)
rdd_length = rdd.map(lambda x: len(x))
rdd_length.collect()
# [3, 4, 5]

答案 1 :(得分:0)

从RDD创建一个Dataframe,然后您可以使用size() sql函数。

df = spark.createDataFrame([([1, 2, 3],),([4,5,6,7],),([7,2,6,9,10],)], ['data'])
df.select(size(df.data)).collect()
#[Row(size(data)=3), Row(size(data)=4), Row(size(data)=5)]

更新

您可以从原始RDD创建一个Dataframe,如下所示:

from pyspark.sql import Row

rowrdd = rdd.map(lambda x: Row(data=x))
df = spark.createDataFrame(rowrdd)
...