Apache spark Pypark动态滤波
是否可以动态筛选数据帧 例如,如果我有下面的字典,其中包含可变数量的键值对,那么如何动态过滤数据帧Apache spark Pypark动态滤波,apache-spark,dynamic,filter,pyspark,Apache Spark,Dynamic,Filter,Pyspark,是否可以动态筛选数据帧 例如,如果我有下面的字典,其中包含可变数量的键值对,那么如何动态过滤数据帧 x = { "date": "2018-10-01", "color": "red" } 我能做到 df.filter(df["date"] == x["date"] & df["color"] == x["color"]) 但字典可以有数量可变的键值对,比如“shape”:“circle”,所以我必须添加到过滤器中。或者,若字典只有一个kvp,那个么它应该只对那个一列进行过滤。有没有
x = {
"date": "2018-10-01",
"color": "red"
}
我能做到
df.filter(df["date"] == x["date"] & df["color"] == x["color"])
但字典可以有数量可变的键值对,比如“shape”:“circle”,所以我必须添加到过滤器中。或者,若字典只有一个kvp,那个么它应该只对那个一列进行过滤。有没有一种基于字典动态构建过滤器的方法
谢谢因为您的逻辑运算符是和,您只需在循环中创建连续过滤的数据帧:
for col in x:
df = df.filter(df[col] == x[col])
如此简单,我忽略了它。谢谢你给谁推荐什么?我不能使用spark.sql。@BIDude我能想到的快速破解方法是
.where('or'.join([{col}='{val}'''.format(col=col,val=x[col]))
。但是,如果列不是字符串,那么这可能会带来数据类型的挑战。我能想到的一种替代方法是使用rdd过滤器:df.rdd.filter(lambda l:any([l[col]==x[col]表示x中的col])).toDF(df.schema)