我读取了一个文件(使用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
以与显式架构相同的方式设置可空性?
答案 0 :(得分:2)
不,当您使用read()
时,您无法强制nullable
将inferSchema
设置为false。 source code包含以下行:
StructField(thisHeader,dType,nullable = true)
使用nullable
时,每列明确地将inferSchema
设置为true。
因此,nullable
不能以这种方式更改,唯一的方法是自己指定架构或更改使用inferSchema
获得的数据帧上的架构。
但是,nullable
是真还是假通常对用户无关紧要。从答案here; “nullable
参数不是约束,而是源和类型语义的反映,它允许某些类型的优化”。
如果您想避免数据中的null
值,可以使用df.dropna()
或df.fillna()
。