問題
如果將包含空字符串和空值的數據保存在表分區所在的列中,那麼在寫入和讀取表後,這兩個值都將變為空值。
為了說明這一點,創建一個簡單的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,它似乎沒有變化:
寫df,再讀一遍,然後顯示出來。空字符串被替換為空值:
導致
這是預期的行為。繼承自Apache Hive。
解決方案
通常,不應該在分區列中同時使用空字符串和空字符串作為值。