分區列中的空字符串和空字符串保存為空值

了解為什麼分區列中的null和空字符串在Databricks中保存為null。

寫的亞當Pavlacka

最後發布日期:2022年5月31日

問題

如果在對表進行分區的列中保存同時包含空字符串和空值的數據,則在寫入和讀取表之後,這兩個值都將變為空值。

為了說明這一點,創建一個簡單的DataFrame

導入org.apache.spark.sql.types。_ import org.apache.spark.sql.catalyst.encoder . rowencoder val data = Seq(Row(1, ""), Row(2, ""), Row(3, ""), Row(4, "hello"), Row(5, null)) val schema = new StructType()。add(“a”,IntegerType)。add("b", StringType) val df = spark.createDataFrame(spark.sparkContext.parallelize(data), schema)

此時,如果顯示的內容df,它似乎沒有變化:

顯示空值和空字符串。

df,再讀一遍,然後顯示出來。空字符串被替換為空值:

空值替換所有空字符串。

導致

這是預期的行為。它繼承自Apache Hive。

解決方案

一般來說,不應該在分區列中同時使用空字符串和空字符串作為值。