Pyspark:比较值,如果为true,则执行语句

时间:2018-11-02 10:27:35

标签: loops if-statement pyspark comparison

我正在尝试使此循环生效,在该循环中,我将roximate_count_distinct的值与阈值进行比较。当distance_count为<2时,我想执行if语句。 但是即使我打印大约时,它也会始终返回“ NULL”(正确的结果(小于2))。我在做什么错了?

for col in s:
    approx = df.agg(approx_count_distinct(col).alias("count"))
    if approx.collect()[0] < 2:
        print(col)

2 个答案:

答案 0 :(得分:1)

您要在ROW类型上执行IF条件,请问您可以检查一下rox.collect()[0]的类型是什么,以支持您正在执行的if条件。

type(approx.collect()[0])

您需要将其更改为**if approx.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)

答案 1 :(得分:-1)

我最终以这种方式这样做:

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)