Apache spark 如何在Spark中将CSV读取到数据帧时指定多个TimestampType和DataType格式?
我正在读取的CSV文件包含3列。以下是列的格式Apache spark 如何在Spark中将CSV读取到数据帧时指定多个TimestampType和DataType格式?,apache-spark,pyspark,apache-spark-sql,spark-dataframe,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,Pyspark Sql,我正在读取的CSV文件包含3列。以下是列的格式 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=sc
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")
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
谢谢我也有类似的要求。我使用下面的代码使用推断模式选项读取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")));
Dataset data=sparkSession.read().format(fileType)。选项(“header”,header)。选项(“inferSchema”,“true”)。选项(“delimiter”,delimeter)。选项(“mode”,“dropmorformed”)。加载(filePath);
然后我用下面的语句格式化了日期。
data=data.withColumn(“日期”),to(“日期”(unix时间戳(“日期”),“mm/dd/yyyy”).cast(“时间戳”);
我认为你做不到,但我可能错了。一种解决方法是将列读取为字符串,然后再将其转换为时间戳
。是的,但在Bigdata Right上分两步进行计算效率低下。我不认为这会太糟糕,无法与连接
,等等。您可以使用unix\u时间戳
进行尝试。同意第一条注释,无论是早还是晚,我们只进行一次转换。当读取csv文件时,转换需要时间。Shaido建议的最佳方式。如本文所述: