嗨,我在笔记本中有这个代码,并且代码为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'
任何帮助都会很好。
答案 0 :(得分:3)
pyspark.rdd.PipelinedRDD
是RDD
的子类,必须在RDD中定义所有API。即。 PipelinedRDD只是RDD
的特殊类型,它是在RDD
上运行地图函数时创建的。
例如,请看下面的代码段。
>>> 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
。