Dataframe Py4JError:调用o129.and时出错。Trace:py4j.Py4JException:Method和([class java.lang.string])不存在

Dataframe Py4JError:调用o129.and时出错。Trace:py4j.Py4JException:Method和([class java.lang.string])不存在,dataframe,pyspark,py4j,Dataframe,Pyspark,Py4j,我试图检查pyspark dataframe中的条件,并向如下列添加值: DF: 预期产出: cd id Location A A A A AA A A AAA New_Loc A B B A BB B A BBB New_Loc 我尝试使用下面的pyspark转换进行填充 df_new = df.withColumn('Location',sf.when(df.cd == 'A' &

我试图检查pyspark dataframe中的条件,并向如下列添加值:

DF:

预期产出:

cd    id    Location
A     A     A
A     AA    A
A     AAA   New_Loc
A     B     B
A     BB    B
A     BBB   New_Loc   
我尝试使用下面的pyspark转换进行填充

df_new = df.withColumn('Location',sf.when(df.cd == 'A' & (df.id isin(['AAA','BBB'])),'New_Loc').otherwise(df.Location))
当我尝试执行此操作时,我得到错误: Py4JError:调用o129.and时出错。Trace:py4j.Py4JException:Method和([class java.lang.string])不存在


知道这个错误是什么吗

好的。。在工作条件周围添加括号

下面是对我有用的东西

df_new = df.withColumn('Location',sf.when((df.cd == 'A') & (df.id isin(['AAA','BBB'])),'New_Loc').otherwise(df.Location))

好的。。在工作条件周围添加括号

下面是对我有用的东西

df_new = df.withColumn('Location',sf.when((df.cd == 'A') & (df.id isin(['AAA','BBB'])),'New_Loc').otherwise(df.Location))

很可能是语法问题。这应该起作用:

import pyspark.sql.functions as f

df_new = df.withColumn(
  'Location', 
  f.when(
    (f.col('cd') == 'A') & (f.col('id').isin(['AAA','BBB'])),
    f.lit('New_Loc'))
  .otherwise(f.col('Location'))
)

很可能是语法问题。这应该起作用:

import pyspark.sql.functions as f

df_new = df.withColumn(
  'Location', 
  f.when(
    (f.col('cd') == 'A') & (f.col('id').isin(['AAA','BBB'])),
    f.lit('New_Loc'))
  .otherwise(f.col('Location'))
)

如果不使用lit,您无法直接在列中写入字符串值。请尝试上述方法,如果不起作用,请告诉我。这里是另一个例子:如果不使用lit,您不能直接在列中写入字符串值。请尝试上面的方法,如果不起作用,请告诉我。下面是另一个示例:在第一个条件周围添加括号起作用。尽管不需要照明。感谢您的回复,
pyspark
通常与
=
等运算符以及后续逻辑运算符(如
&
等)进行斗争。也就是说,我建议使用
f.lit()
f.col()
,因为一些
pyspark
方法和函数会同时重载到列名和文本值,因此具体化通常更为有益和明确。另外,正如PEP8告诉我们的,显式>隐式。在第一个条件周围添加括号是有效的。尽管不需要照明。感谢您的回复,
pyspark
通常与
=
等运算符以及后续逻辑运算符(如
&
等)进行斗争。也就是说,我建议使用
f.lit()
f.col()
,因为一些
pyspark
方法和函数会同时重载到列名和文本值,因此具体化通常更为有益和明确。此外,正如PEP8告诉我们的,显式>隐式。