我在尝试同时将多个csv文件加载到Spark时面临一个困难(相当奇怪的结果)
df = spark.read.csv('/dir/*.csv', header=True, inferSchema=True)
df.printschema()
# Sale_Value String(nullable=true) # it should be Double/float
# Name String # Fine for all string columns
所以基本上所有的整数和双列都转换为字符串类型,我希望它是双重类型,因为我将inferschema参数传递为true。
我检查了我的数据并确认没有空值或任何字符串值。
奇怪的是 - >
我将每个文件读入单独的dfs,df1 = spark.read.csv(file1,inferSchema = True), df2 = spark.read.csv(file2,inferSchema = True),然后为每个数据帧打印模式,所有模式都按预期进行(dpouble将变为double,string为string)
我开始将每个单独的dfs附加到单个df中,如df = df1.union(df2),df = df.union(df2)..等,并检查打印df.printSchema(),然后所有结果都是正如所料......没有问题。
所以我对单个加载文件(* .csv)中多个文件加载的行为感到困惑。
是否有任何关于inferSchema行为的遗漏。请详细说明。
我的数据是双引号括号(以避免在字段中找到逗号时拆分记录),例如:“name”,“sale_target”,“sale_V”,“gender”....
我有3个文件,其中2个文件是引用括号的,一个文件没有引用括号(这就是我遇到这个问题的原因,我删除了没有引号的文件,并且猜猜一切都很完美。
因此,如果我正在使用/读取/加载多个csv文件,那么我必须使用all-files-QuoteEnclosed或all-file-without-QuoteEnclosed?