如何在Spark中将CSV读取到数据帧时指定多个TimestampType和DataType格式?

时间:2017-10-13 07:10:28

标签: apache-spark pyspark apache-spark-sql spark-dataframe pyspark-sql

我正在阅读的CSV文件包含3列。以下是列的格式。

  1. DateTime1的格式为“mm / dd / yyyy hh:mm:ss”
  2. DateTime2的格式为“dd / mm / yy hh:mm:ss”
  3. 日期格式为“mm / dd / yyyy”
  4. 以下代码允许对所有列进行一次时间格式化。

    schema_datatype = StructType([StructField('DateTime1',TimestampType(),True),
    StructField('DateTime2',TimestampType(),True),
    StructField('Date',DataType(),True)])
    
    
    df= spark.read.csv(header=True,\
    path="sample.csv",\
    schema=schema_datatype, \
    timestampFormat="mm/dd/yyyy hh:mm:ss")
    

    但是如何在使用read.csv时指定每列的日期格式。 PS:我使用Spark 2.1.0

    由于

1 个答案:

答案 0 :(得分:0)

我也有类似的要求。我使用下面的代码使用推断模式选项读取csv。

 Dataset<Row> data = sparkSession.read().format(fileType).option("header",header).option("inferSchema", "true").option("delimiter",delimeter).option("mode", "DROPMALFORMED").load(filePath);

Then i formatted the date using the below statement.
data=data.withColumn("the_date", to_date(unix_timestamp(col("the_date"), "mm/dd/yyyy").cast("timestamp")));