【问题标题】:Spark-csv data source: infer data typesSpark-csv 数据源:推断数据类型
【发布时间】:2017-04-14 16:41:34
【问题描述】:

我正在尝试使用 Spark-CSV 包 (https://github.com/databricks/spark-csv) 将 csv 文件读入 Spark DataFrames

一切正常,但所有列都假定为StringType

如 Spark SQL 文档 (https://spark.apache.org/docs/latest/sql-programming-guide.html) 所示,对于 JSON 等内置源,可以自动推断具有数据类型的架构。

CSV文件中的列类型可以自动推断吗?

【问题讨论】:

  • 1. StringTypes 是 SparkSQL 中的一种字段类型。 2.你问的不是很清楚,你能不能更具体的说一下你想要达到的目标
  • 我问的是自动类型推断,它在 JSON 等内置数据源中可用。 IE。如果有人使用 sqlContext.jsonFile("...") 从 json 文件中创建 df,其中包含一个整数和一个字符串字段 - 这些类型将在模式中定义。 CSV 数据源格式可以做到这一点吗?

标签: apache-spark dataframe


【解决方案1】:

从 Spark 2 开始,我们可以像这样使用选项“inferSchema”: getSparkSession().read().option("inferSchema", "true").csv("YOUR_CSV_PATH")

【讨论】:

    【解决方案2】:

    很遗憾,目前不支持此功能,但它会是一个非常有用的功能。目前它们必须在 DLL 中声明。从我们拥有的文档中:

    header:设置为 true 时,文件的第一行将用于命名列,并且不会包含在数据中。所有类型都将被假定为字符串。默认值为 false。

    这就是你所看到的。

    请注意,可以在查询时推断架构,例如

    select sum(mystringfield) from mytable
    

    【讨论】:

    • 谢谢,我就是这么想的,谢谢确认。我同意 - 这将是 非常 不错的功能。精确的类型匹配可能是不可行的,但各种启发式方法可能是可能的:基于列中的前 N ​​条记录的类型、基于随机 N 条记录、基于 N/大小分数等
    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2016-05-02
    • 1970-01-01
    • 2019-06-22
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多