我有一個稱為good_df混合型別列的 DataFrame。我正在嘗試將任何空值設定'null'為StringType. 我認為下面的代碼會起作用,但事實并非如此。
self.good_df = self.good_df.select([when((col(c)=='') & (isinstance(self.good_df.schema[c].dataType, StringType)),'null').otherwise(col(c)).alias(c) for c in self.good_df.columns])
我正在查看錯誤訊息,但它并沒有給我太多線索:
回溯(最后一次呼叫):檔案“”,第 1 行,在檔案“/usr/lib/python2.7/site-packages/pyspark/sql/column.py”中,第 116 行,在_njc = getattr(self ._jc,名稱)(jc)檔案“/usr/lib/python2.7/site-packages/py4j/java_gateway.py”,第 1257 行, 呼叫中answer, self.gateway_client, self.target_id, self.name) File "/usr/lib/python2.7/site-packages/pyspark/sql/utils.py", line 63, in deco return f(*a, * *kw)檔案“/usr/lib/python2.7/site-packages/py4j/protocol.py”,第 332 行,get_return_value 格式(target_id,“.”,名稱,值)) Py4JError:呼叫時發生錯誤o792.and。Trace: py4j.Py4JException: Method and([class java.lang.Boolean]) 不存在于 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326) ) at py4j.Gateway.invoke(Gateway.java:274) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run (GatewayConnection.java:238) 在 java.lang.Thread.run(Thread.java:748)
有人對發生的事情有任何想法嗎?謝謝!
uj5u.com熱心網友回復:
您收到的錯誤訊息:
py4j.Py4JException:方法和([class java.lang.Boolean])不存在
這意味著您正在嘗試在運算式和文字值AND之間應用運算子。ColumnBoolean
您需要更改此部分:
(isinstance(self.good_df.schema[c].dataType, StringType))
到
from pyspark.sql.functions import lit
lit(isinstance(self.good_df.schema[c].dataType, StringType))
也就是說,實際上您可以將檢查列型別的條件直接移動到 python 串列理解中:
self.good_df = self.good_df.select(*[
when((col(c) == ''), 'null').otherwise(col(c)).alias(c) if t == "string" else col(c)
for c, t in self.good_df.dtypes
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/421890.html
標籤:
