使用inferSchema = True强制spark.read()将数字列设置为不可为空

时间:2017-09-14 07:53:07

标签: scala apache-spark nullable

我读取了一个文件(使用Spark 2.0)并推断出架构:

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 个答案:

答案 0 :(得分:2)

不,当您使用read()时,您无法强制nullableinferSchema设置为false。 source code包含以下行:

  

StructField(thisHeader,dType,nullable = true)

使用nullable时,每列明确地将inferSchema设置为true。

因此,nullable不能以这种方式更改,唯一的方法是自己指定架构或更改使用inferSchema获得的数据帧上的架构。

但是,nullable是真还是假通常对用户无关紧要。从答案here; “nullable参数不是约束,而是源和类型语义的反映,它允许某些类型的优化”。

如果您想避免数据中的null值,可以使用df.dropna()df.fillna()