Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Pyspark 如何在Spark中级联未知数量的条件而不循环遍历每个条件_Pyspark_Apache Spark Sql - Fatal编程技术网

Pyspark 如何在Spark中级联未知数量的条件而不循环遍历每个条件

Pyspark 如何在Spark中级联未知数量的条件而不循环遍历每个条件,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我想根据已处理的用户查询过滤数据帧,但是条件的数量不是恒定的,并且会随着用户的不同而变化。例如,假设两个用户具有以下不同的条件 1- df.filter( ( col('A') == 'book' ) & (col('B') == '1') & (col('C') == '0') ) 2- df.filter( ( col('A') == 'film') ) & (col('B') == '0')) 一种解决方案是按顺序级联条件 for k,v in argList:

我想根据已处理的用户查询过滤数据帧,但是条件的数量不是恒定的,并且会随着用户的不同而变化。例如,假设两个用户具有以下不同的条件

1- df.filter( ( col('A') == 'book' ) & (col('B') == '1') & (col('C') == '0') )
2- df.filter( ( col('A') == 'film') ) & (col('B') == '0'))
一种解决方案是按顺序级联条件

for k,v in argList:
   df = df.filter(col(k) == v)
其中argList是每个用户的条件列表,例如
[('A','book'),('B','1'),('C','0')]
[('A','film'),('B','0')]


有没有更好的方法来级联多个条件而不循环遍历每个条件?

循环遍历条件没有什么错,因为Spark Optimizer会将所有过滤器合并为一个过滤器:

df=spark.createDataFrame([(1,2)、(1,4)、(5,6)],['A','B']
df=df.filter(F.col('A')==1)
df=df.filter(F.col('B')==4)
df.explain()
印刷品

==物理计划==
*(1) 过滤器((isnotnull(A#0L)和isnotnull(B#1L))以及(A#0L=1)和(B#1L=4))
+-*(1)扫描现有RDD[A#0L,B#1L]
并且只执行一个过滤操作