首页 > 解决方案 > Pyspark:比较值,如果为真,则执行语句

问题描述

我试图使这个循环工作,我将 approx_count_distinct 的值与阈值进行比较。我想在 distinct_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)

标签: loopsif-statementpysparkcomparison

解决方案


您正在对 ROW 类型执行 IF 条件,您能否检查一下 approx.collect()[0] 的类型是什么,它应该是 int 以支持您正在执行的 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)

推荐阅读