PySpark或方法异常

PySpark或方法异常,pyspark,Pyspark,我正在尝试修改PySpark dataframe中的列值,如下所示: df_cleaned = df_cleaned.withColumn('brand_c', when(df_cleaned['brand'] == "samsung" |\ df_cleaned['brand'] == "oppo", df_cleaned.brand)\

我正在尝试修改PySpark dataframe中的列值,如下所示:

df_cleaned = df_cleaned.withColumn('brand_c', when(df_cleaned['brand'] == "samsung" |\
                                                   df_cleaned['brand'] == "oppo", df_cleaned.brand)\
                                   .otherwise('others'))
这将生成以下异常:

调用o435.or时出错。跟踪:py4j.Py4JException: 方法或([class java.lang.String])在不存在 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) 在 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326) 在py4j.Gateway.invoke(Gateway.java:274)处 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在py4j.commands.CallCommand.execute(CallCommand.java:79)处 在上运行(GatewayConnection.java:238) run(Thread.java:748)

回溯(最近一次调用上次):文件 “/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/column.py”,第行 115,在_ njc=getattr(self._jc,name)(jc)文件“/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”, 第1257行,在调用中 答案,self.gateway_client,self.target_id,self.name)文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py”,第63行, 装饰 返回f(*a,**kw)文件“/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py”,行 332,在get_返回_值中 格式(target_id,“.”,name,value))py4j.protocol.Py4JError:调用o435.or时出错。跟踪:py4j.Py4JException: 方法或([class java.lang.String])在不存在 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) 在 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326) 在py4j.Gateway.invoke(Gateway.java:274)处 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在py4j.commands.CallCommand.execute(CallCommand.java:79)处 在上运行(GatewayConnection.java:238) run(Thread.java:748)


你只是少了几个括号。尝试:

df_cleaned = df.withColumn('brand_c', when((df['Product'] == "apple") |\
                (df['Product'] == "oppo"), df.User).otherwise('others'))

在pyspark中使用比较运算符时,请始终使用括号。

您只是缺少几个括号而已。尝试:

df_cleaned = df.withColumn('brand_c', when((df['Product'] == "apple") |\
                (df['Product'] == "oppo"), df.User).otherwise('others'))
在pyspark中使用比较运算符时始终使用括号