将日期时间保存到 Spark 中的 Parquet

Save datetime into Parquet in Spark

我想在编译时用未知格式的数据创建 Parquet 文件。稍后我将模式作为文本获取,并且我知道某些列包含日期和时间。我想使用 Spark 和 Java 来做到这一点。所以我遵循 http://spark.apache.org/docs/1.2.1/sql-programming-guide.html#programmatically-specifying-the-schema 并创建了具有适当类型的模式。我尝试将 Spark 的 DataType.TimestampTypeDataType.DateType 用于像列这样的日期。但他们都没有工作。当我尝试使用 JavaSchemaRDD.saveAsParquetFile 保存文件时,出现错误 Unsupported datatype+ 我尝试的日期类型。我用 emptyRDD 试过了,所以数据转换没有任何问题。

经过调查:http://parquet.incubator.apache.org/documentation/latest/ and https://github.com/Parquet/parquet-format/blob/master/LogicalTypes.md 我认为我需要将数据转换成某种 integer/long 类型并告知它们代表日期这一事实。如果是这样,我该如何在 Spark 中执行此操作?或者我可能需要做些其他事情?

我面临着完全相同的问题。似乎 Parquet 文件的 DateType 和 Timestamp 支持将添加到 Spark 1.3 中(更多信息在 https://github.com/apache/spark/pull/3820 and https://issues.apache.org/jira/browse/SPARK-4709)。

Spark 将使用 INT96 类型的 Parquet 来存储 Timestamp 类型(就像 Impala)。