我有一个pyspark RDD(# add
pry(main)> my_params
=> <ActionController::Parameters {"prop1"=>"val1"} permitted: true>
pry(main)> my_params.awesome_add(prop1: "val2")
<ActionController::Parameters {"prop1"=>["val1", "val2"]} permitted: true>
# remove
pry(main)> my_params.awesome_remove(prop1: "val1")
=> <ActionController::Parameters {"prop1"=>"val2"} permitted: true>
),它是一个可变长度的ID列表,例如
myRDD
我有一个包含[['a', 'b', 'c'], ['d','f'], ['g', 'h', 'i','j']]
列和myDF
列的pyspark数据框(ID
)。
我想使用查询查询value
:
myDF
其中outputDF = myDF.select(F.collect_set("value")).alias("my_values").where(col("ID").isin(id_list))
是来自id_list
的元素,例如[&#39; d&#39;,&#39; f&#39;]或[&#39; a&#39} ;,&#39; b&#39;,&#39; c&#39;]。
一个例子是:
myRDD
使用RDD像这样查询DF的可并行化方法是什么?
答案 0 :(得分:0)
考虑您的数据框列&#34; ID&#34;属于y
类型,您希望保留显示在任何RDD行中的ID值。
首先,让我们将RDD转换为一列数据帧,每行包含一个唯一ID:
stringType()
我们将对其进行探讨,以便每行只有一个ID值:
from pyspark.sql import HiveContext
hc = HiveContext(sc)
ID_df = hc.createDataFrame(
myRDD.map(lambda row: [row]),
['ID']
).withColumn("uniqueID", psf.monotonically_increasing_id())
我们现在可以加入原始数据框,内部联接将用作过滤器:
import pyspark.sql.functions as psf
ID_df = ID_df.withColumn('ID', psf.explode(ID_df.ID))
myDF = myDF.join(ID_df, "ID", "inner)
是一个聚合函数,因此在使用它之前需要collect_set
,例如新创建的行ID:
groupBy