apache-spark - 在加载多个文件的情况下,带有 inferschema=True 的 spark.read.csv 的行为
问题描述
我在尝试将多个 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 是双倍的,字符串是字符串)
我开始将每个单独的 dfs 附加到单个 df 中,例如 df = df1.union(df2), df= df.union(df2)..etc 并检查打印 df.printSchema(),然后所有结果都符合预期......不那个问题。
所以我对单个加载状态(* .csv)中多个文件加载的行为感到困惑。
我对 inferSchema 行为有什么遗漏吗?请阐明一些观点。
编辑
我的数据是双引号括起来的(以避免在字段中找到逗号时拆分记录),例如:“name”,“sale_target”,“sale_V”,“gender”....
我有 3 个文件,其中 2 个文件是引号括起来的,一个文件没有引号括起来(这就是原因,我遇到了这个问题,我删除了没有引号的文件,猜猜一切工作完美)。
因此,如果我使用/读取/加载多个 csv 文件,那么我必须使用 all-files-QuoteEnclosed 或 all-file-without-QuoteEnclosed 吗?
解决方案
推荐阅读
- asp.net-core - gRPC:需要多少个 proto 服务?
- javascript - js 变量日志在 console.log 中完美,但在创建 cookie 函数中不起作用
- javascript - 承诺返回待处理
- python - (Python)我如何制作一个计算某人活了多少天的程序?
- javascript - 如何调用子构造函数方法?
- html - Bootstrap 下拉选择 CSS 不适用于 !important
- reactjs - 如何在我的设备上保存大部分 React JS 组件?
- excel - 合并包含公式/单元格引用的多个工作表中的数据
- python - 如何使用 Python 将 int 发送到 arduino
- java - WildFly 23.0.2 BASIC 身份验证不起作用