2017-09-14 61 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()