[英]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.PipelinedRDD
是RDD
的子类,它必须具有 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.