Loops Pyspark:比较值和if true执行语句
我试图使这个循环工作,在这里我比较了一个近似计数的值和一个阈值。我想在distinct_count为时执行if语句。您正在对行类型执行if条件,请检查近似collect()[0]的类型,它应该为int以支持您正在执行的if条件Loops Pyspark:比较值和if true执行语句,loops,if-statement,pyspark,comparison,Loops,If Statement,Pyspark,Comparison,我试图使这个循环工作,在这里我比较了一个近似计数的值和一个阈值。我想在distinct_count为时执行if语句。您正在对行类型执行if条件,请检查近似collect()[0]的类型,它应该为int以支持您正在执行的if条件 type(approx.collect()[0]) 如果约为collect()[0][0]
type(approx.collect()[0])
如果约为collect()[0][0]<2:**
试试这个,它应该可以工作:
s = ['a','b','c','d','e']
for col in s:
approx = spark.sql("select 1 AS a")
if approx.collect()[0][0] < 2:
print(col)
s=['a','b','c','d','e']
对于col in s:
近似值=spark.sql(“选择1作为参数”)
如果大约收集()[0][0]<2:
打印(col)
我最终是这样做的:
for col in s:
approx = df.agg(approx_count_distinct(col).alias("count"))
if (approx.select(F.col("count")).rdd.flatMap(lambda x: x).collect()[0]) < 2:
print(col)
对于s中的列:
近似=df.agg(近似计数不同(列)。别名(“计数”))
如果(近似选择(F.col(“计数”)).rdd.flatMap(λx:x).collect()[0])<2:
打印(col)
这听起来像是一个错误。你的最终目标是什么?在任何情况下,调用collect()
都是非常昂贵的,因此最好只调用一次,而不要在循环中重复调用。也许您真正想要的是:column\u to\u distinct\u count\u dict=next((df.agg中的行为row.asDict()([approxCountDistinct(c).alias(c)(df.columns中的c)).collect(),{})
?
for col in s:
approx = df.agg(approx_count_distinct(col).alias("count"))
if (approx.select(F.col("count")).rdd.flatMap(lambda x: x).collect()[0]) < 2:
print(col)