带有inferschema的spark.read.csv的行为=在多个文件加载的情况下为True

时间:2018-05-16 07:13:43

标签: apache-spark dataframe pyspark

我在尝试同时将多个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。

我检查了我的数据并确认没有空值或任何字符串值。

奇怪的是 - >

  1. 我将每个文件读入单独的dfs,df1 = spark.read.csv(file1,inferSchema = True), df2 = spark.read.csv(file2,inferSchema = True),然后为每个数据帧打印模式,所有模式都按预期进行(dpouble将变为double,string为string)

  2. 我开始将每个单独的dfs附加到单个df中,如df = df1.union(df2),df = df.union(df2)..等,并检查打印df.printSchema(),然后所有结果都是正如所料......没有问题。

  3. 所以我对单个加载文件(* .csv)中多个文件加载的行为感到困惑。

    是否有任何关于inferSchema行为的遗漏。请详细说明。

    修改

    我的数据是双引号括号(以避免在字段中找到逗号时拆分记录),例如:“name”,“sale_target”,“sale_V”,“gender”....

    我有3个文件,其中2个文件是引用括号的,一个文件没有引用括号(这就是我遇到这个问题的原因,我删除了没有引号的文件,并且猜猜一切都很完美。

    因此,如果我正在使用/读取/加载多个csv文件,那么我必须使用all-files-QuoteEnclosed或all-file-without-QuoteEnclosed?

    档案位置https://github.com/satya-panda/king-s-things

0 个答案:

没有答案