繁体   English   中英

需要 RDD 的实例,但返回类 'pyspark.rdd.PipelinedRDD'

[英]need instance of RDD but returned class 'pyspark.rdd.PipelinedRDD'

嗨,我在 Notebooks 和托盘中有此代码来编写 python spark:

 mydataNoSQL.createOrReplaceTempView("mytable")
 spark.sql("SELECT * from mytable")
 return mydataNoSQL

def getsameData(df,spark):
result = spark.sql("select * from mytable where temeperature is not null")
return result.rdd.sample(False, 0.1).map(lambda row : (row.temperature))

我需要一个实例 RDD,但我得到了一个类“pyspark.rdd.PipelinedRDD”

任何帮助都会受到欢迎。

pyspark.rdd.PipelinedRDDRDD的子类,它必须具有 RDD 中定义的所有 API。 即。 PipelinedRDD 只是一种特殊类型的RDD ,它是在您在RDD上运行 map 函数时创建的。

例如,看看下面的代码片段。

>>> rdd = spark.sparkContext.parallelize(range(1,10))
>>> type(rdd)
<class 'pyspark.rdd.RDD'> ## the type is RDD here
>>> rdd = rdd.map(lambda x: x * x)
>>> type(rdd)
<class 'pyspark.rdd.PipelinedRDD'> ## after the map operation the type is changed to pyspark.rdd.PipelinedRDD

因此,您应该将pyspark.rdd.PipelinedRDD视为代码中的RDD

Python 中没有完整的强制转换支持,因为它是一种动态类型语言。 将您的pyspark.rdd.PipelinedRDD强制转换为普通 RDD,您可以在 rdd 上收集并将其并行化

>>> rdd = spark.sparkContext.parallelize(rdd.collect())
>>> type(rdd)
<class 'pyspark.rdd.RDD'>

如果 RDD 的数据很大,在 RDD 上运行collect可能会导致MemoryError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM