在寫這個問題時,我設法找到了解釋。但由于這似乎是一個棘手的問題,我還是會發布并回答它。隨意補充。
在我看來,pyspark 的行為不一致,但由于我對它很陌生,我可能會遺漏一些東西......我的所有步驟都在 Azure Databricks 筆記本中運行,資料來自 Azure Datalake 中托管的鑲木地板檔案2 代。
我想簡單地從通過讀取鑲木地板檔案創建的 spark 資料框中過濾 NULL 記錄,步驟如下:

對phone列進行過濾作業正常:

我們可以看到至少一些contact_tech_id值也丟失了。但是當過濾這個特定的列時,一個空的資料框被檢索......

有沒有解釋為什么會發生這種情況,或者我應該尋找什么?
uj5u.com熱心網友回復:
對contact_tech_idNull 值進行過濾不成功的原因是null,筆記本輸出中此列中顯示的實際上是一個NaN值(“不是數字”,請參閱
uj5u.com熱心網友回復:
為了比較NULL值是否相等,Spark 提供了一個空安全的相等運算子(<=>),當其中一個運算元為 NULL 時回傳 False,當兩個運算元都為 NULL 時回傳 True。而不是使用is null 始終推薦(<=>)運算子。
Apache Spark 支持標準的比較運算子,例如 >、>=、=、< 和 <=。當運算元之一或兩個運算元未知或 NULL 時,這些運算子的結果未知或 NULL。為了比較 NULL 值是否相等,Spark 提供了一個空安全相等運算子 (<=>),當其中一個運算元為 NULL 時回傳 False,當兩個運算元都為 NULL 時回傳 True。你可以參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383914.html
標籤:阿帕奇火花 火花 apache-spark-sql 数据块 azure-databricks
上一篇:使用Docker映像運行bundleinstall會忽略bundleconfig設定
下一篇:根據條件pyspark洗掉列
