我正在 ETL 中的 spark scala 中創建一個行程,用于檢查 ETL 程序中發生的某些事件。我從一個空的資料框開始,如果發生事件,這個資料框會填充資訊(無法填充資料框,它只能與具有相同結構的其他資料框連接)。問題是在該程序結束時,已生成的資料幀被加載到表中,但可能會發生資料幀最終為空的情況,因為沒有發生任何事件,我不想加載一個資料幀空,因為沒有意義。所以,我想知道是否有一種優雅的方式將資料框加載到表中,只有在不使用 if 條件的情況下它不為空。謝謝!!
uj5u.com熱心網友回復:
無論如何,我建議創建資料框;如果您不創建具有相同架構的表,即使它是空的,您對 DF 的操作/轉換也可能會失敗,因為它可能參考可能不存在的列。
為了解決這個問題,您應該始終創建一個具有相同架構的 DataFrame,這意味著無論資料是否存在,都具有相同的列名和資料型別。您可能希望稍后用資料填充它。
如果您仍然想按照自己的方式進行操作,我可以為 Spark 2.1.0 及更高版本指出一些想法:
df.head(1).isEmpty
df.take(1).isEmpty
df.limit(1).collect().isEmpty
這些是等價的。我不推薦使用df.count > 0,因為它的時間復雜度是線性的,你仍然需要像df != null以前一樣進行檢查。
一個更好的解決方案是:
df.rdd.isEmpty
或者從 Spark 2.4.0 開始,還有Dataset.isEmpty。
如您所見,無論您決定做什么,都需要在某處進行檢查,因此您無法真正擺脫這種if情況 - 正如句子所暗示的那樣:if您希望避免創建空資料框。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494563.html
