Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Pypark动态滤波_Apache Spark_Dynamic_Filter_Pyspark - Fatal编程技术网

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)