apache-spark - 如何强制 CSV 的 inferSchema 将整数视为日期(使用 "dateFormat"选项)?

标签 apache-spark dataframe apache-spark-sql spark-csv

我使用 Spark 2.2.0

我正在阅读一个 csv 文件,如下所示:

val dataFrame = spark.read.option("inferSchema", "true")
                          .option("header", true)
                          .option("dateFormat", "yyyyMMdd")
                          .csv(pathToCSVFile)

此文件中有一个日期列,所有记录的值都等于 20171001对于这个特定的列。

问题是 spark 推断该列的类型是 integer而不是 date .当我删除 "inferSchema"选项,该列的类型是 string .

没有null值,也没有此文件中任何格式错误的行。

这个问题的原因/解决方案是什么?

最佳答案

如果我的理解正确,code意味着以下类型推断的顺序(首先检查第一个类型):

  • NullType
  • IntegerType
  • LongType
  • DecimalType
  • DoubleType
  • TimestampType
  • BooleanType
  • StringType

  • 有了这个,我认为问题在于 20171001匹配 IntegerType在考虑之前 TimestampType (它使用 timestampFormat 而不是 dateFormat 选项)。

    一种解决方案是定义模式并将其与 schema 一起使用。运算符(来自 DataFrameReader )或让 Spark SQL 推断模式并使用 cast运算符(operator)。

    如果字段数不高,我会选择前者。

    关于apache-spark - 如何强制 CSV 的 inferSchema 将整数视为日期(使用 "dateFormat"选项)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46529404/

    相关文章:

    apache-spark - Spark 作业卡在 99% 并且无法继续

    scala - 如何在 Scala 中将 Array[(Double, Double)] 转换为 Array[Double]?

    apache-spark - 将数据从 dstream 写入 parquet

    python - Pandas - 替换、 float 和列的总和

    python - 打印满足特定条件的值的列名和行名

    sql-server - Spark 在执行 jdbc 保存时给出空指针异常

    hadoop - Spark Streaming:将Dstream批处理加入单个输出文件夹

    scala - 如何查看应用 K-Means 算法后添加到集群中的数据点?

    java - 如何将行中的结构字段转换为 Spark Java 中的 avro 记录

    python - Pandas Group 通过制作系列;不是 groupby 对象