力spark.read()的则InferSchema =真设置数值列不可为空
问题描述:
我读文件(使用星火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
设置可空性的方式与显式模式相同?
答
不,您不能强制read()
在使用inferSchema
时将nullable
设置为false。该source code包含此行:
StructField(thisHeader,D型,可为空=真)
其中明确规定每一列的使用inferSchema
时nullable
为true。
因此,nullable
不能通过这种方式进行更改,唯一的方法是自己指定模式或更改通过使用inferSchema
获得的数据帧的架构。
但是,无论是nullable
是真还是假,通常对用户无关紧要。从答案here; “nullable
参数不是约束条件,而是源和类型语义的反映,它启用某些类型的优化”。
如果您希望避免在数据中使用null
值,您可以使用df.dropna()
或df.fillna()
。