問題
如果在對表進行分區的列中保存同時包含空字符串和空值的數據,則在寫入和讀取表之後,這兩個值都將變為空值。
為了說明這一點,創建一個簡單的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。
解決方案
一般來說,不應該在分區列中同時使用空字符串和空字符串作為值。