2017-09-14 62 views
0

我讀文件(使用星火2.0)與模式推斷後:力spark.read()的則InferSchema =真設置數值列不可爲空

from pyspark.sql import SparkSession 
spark = SparkSession.builder.appName('foo').getOrCreate() 

df = spark.read.csv('myData.csv', inferSchema=True) 

所有列,string和數字,是空的。

但是,如果我使用顯式模式讀取文件,則只有string列可以爲空。

是否有辦法強制read()inferSchema=True設置可空性的方式與顯式模式相同?

回答

1

不,您不能強制read()在使用inferSchema時將nullable設置爲false。該source code包含此行:

StructField(thisHeader,D型,可爲空=真)

其中明確規定每一列的使用inferSchemanullable爲true。

因此,nullable不能通過這種方式進行更改,唯一的方法是自己指定模式或更改通過使用inferSchema獲得的數據幀的架構。


但是,無論是nullable是真還是假,通常對用戶無關緊要。從答案here; 「nullable參數不是約束條件,而是源和類型語義的反映,它啓用某些類型的優化」。

如果您希望避免在數據中使用null值,您可以使用df.dropna()df.fillna()