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

了解為什麼分區列中的空和空字符串在數據ricks中保存為空。

寫的亞當Pavlacka

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

問題

如果將包含空字符串和空值的數據保存在表分區所在的列中,那麼在寫入和讀取表後,這兩個值都將變為空值。

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

% scala org.apache.spark.sql.types進口。_ import org.apache.spark.sql.catalyst.encoders.RowEncoder val data = Seq(Row(1, ""), Row(2, ""), Row(3, ""), Row(4, "hello"), Row(5, null)) val schema = new StructType()。add(“a”,IntegerType)。添加("b", StringType) val df = spark.createDataFrame(spark.sparkContext.parallelize(data), schema)

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

顯示Null值和空字符串。

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

Null值替換所有空字符串。

導致

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

解決方案

通常,不應該在分區列中同時使用空字符串和空字符串作為值。