Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pyspark 获取RDD对象中每个列表的长度_Pyspark_Rdd_Nested Lists - Fatal编程技术网

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

Pyspark 获取RDD对象中每个列表的长度,pyspark,rdd,nested-lists,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)表示列表中的y],如何迭代RDD您只需在RDD中执行映射操作: x=[[1,2,3],[4,5,6,7],[7,2,6,9,10]] rdd=sc.pa

我有一个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)表示列表中的y]
,如何迭代RDD

您只需在RDD中执行
映射操作:

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

您只需在RDD中执行
映射操作即可:

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

从RDD创建一个数据帧,然后可以使用
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创建数据帧,如下所示:

from pyspark.sql import Row

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

从RDD创建一个数据帧,然后可以使用
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创建数据帧,如下所示:

from pyspark.sql import Row

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

执行起来要花很多时间,我是否需要使用sc.parallelize,因为RDD?@muni
sc.parallelize
仅用于将非RDD数据(
x
在我的示例中)转换为RDD,以便于说明;如果你已经有了RDD,你就不应该使用它,你应该从我上面代码的
RDD_长度
部分开始……因此,有近5m的记录,每个记录可能有50-200个元素。它能固定吗?@muni很难说(你问了一个非常具体的问题,答案就在这个问题上),但是Spark中的dataframeapi对于PySpark应用程序来说可能更快。检查另一个答案的性能…您可以尝试增加分区的数量。执行时需要花费大量时间,我是否需要使用sc.parallelize,用于RDD?@muni
sc.parallelize
仅用于将非RDD数据(
x
在我的示例中)转换为RDD,以便于说明;如果你已经有了RDD,你就不应该使用它,你应该从我上面代码的
RDD_长度
部分开始……因此,有近5m的记录,每个记录可能有50-200个元素。它能固定吗?@muni很难说(你问了一个非常具体的问题,答案就在这个问题上),但是Spark中的dataframeapi对于PySpark应用程序来说可能更快。检查另一个答案的性能…您可以尝试增加分区数。如果
createDataFrame
的参数是RDD,那么这将不起作用,因为OP asksThis只接受每个列表的第一个元素!您应该将其更改为
Row(data=x)
…如果
createDataFrame
的参数是RDD,这将不起作用,因为OP asksThis只接受每个列表的第一个元素!您应该将其更改为
行(data=x)
。。。