建立连续条件到何时

时间:2016-10-18 16:52:03

标签: python apache-spark apache-spark-sql

我正在尝试构建连续when的SQL请求。

def build_modify_function(df, ids_colname, modified_colname, modification_list):
if len(modification_list) == 0:
    pass
# Small optimization
id_col      = df[ids_colname]
modif_col   = df[modified_colname]
# There is no "identity element" so :
ret = None
for (row_ids, new_value) in modification_list:
    if type(row_ids) != type(list()):
        row_ids = list(row_ids)
    if ret == None:
        ret = when(id_col.isin(row_ids), new_value) # .isin(row_ids)
    else:
        ret = ret.when(id_col.isin(row_ids), new_value)
return modif_col if ret == None else ret.otherwise(modif_col)

df是一个数据框,

ids_colname是我的ID的列名,

modified_colname是我要修改的列名,

modification_list是元组[(list_of_ids, new_value)]

的列表

我遇到了这个错误:

ValueError: Cannot convert column into bool: 
please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

我不明白为什么。当我构建一个非常简单的函数返回时:

 tmp = when(id_col.isin(row_ids), new_value)
 return tmp\
     .when(id_col.isin(row_ids), new_value)\
     .otherwise(modif_col)

完美无缺。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我认为问题在于:

if ret == None:
   ...

通常,你不应该使用相等运算符来比较Python中的单例对象,并且始终使用isis not

if ret is None:
    ...

在此特定情况下,列的相等运算符会明确返回ColumnColumn对象,禁止转换为bool。