为什么spark不识别我的“ Dataframe 布尔表达式”?

ev7lccsx  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(206)

环境

pyspark 2.1.0 python 3.5.2 ##问题
我有一个具有多个条件的联接:

join_cond = [
    (col("ltmr1.anc_ref") == col("global.anc_ref") &
     col("global.straight_distance") >= args.radius_1 &
     col("global.straight_distance") <= args.radius_2)
]

这将在以后使用:

ltm_r1_in_r2 = data_with_straight_distance.alias("global") \
    .join(
        less_than_min_r1.select(
            col("anc_ref"),
            col("num_rep")
        ).alias("ltmr1"),
        join_cond,
        "leftsemi"
)

程序在以下行失败:

col("global.straight_distance") >= args.radius_1 &

哪里 args 元组是从 argparse .
相关跟踪:

File "/mnt/mesos/sandbox/full_load.py", line 114, in full_load
    col("global.straight_distance") >= args.radius_1 &
  File "/usr/local/spark/python/lib/pyspark.zip/pyspark/sql/column.py", line 635, in __nonzero__
ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

为什么spark没有意识到我的情况,我应该如何纠正?

7ivaypg9

7ivaypg91#

尝试将每个条件语句放在括号内

join_cond = [
    ((col("ltmr1.anc_ref") == col("global.anc_ref")) &
     (col("global.straight_distance") >= args.radius_1) &
     (col("global.straight_distance") <= args.radius_2))
]
q5lcpyga

q5lcpyga2#

以下为预期输出:

join_cond = [
    col("ltmr1.anc_ref") == col("global.anc_ref"),
    col("global.distance") >= args.radius_1,
    col("global.distance") <= args.radius_2
]

相关问题