我有一個磚5.3集群在Azure上運行Apache火花測試盒框和Scala 2.11。
我想與一個定製的時間戳格式解析CSV文件,但我不知道哪個datetime格式火花使用模式。 我的CSV看起來像這樣:時間戳、名稱、值02/07/2019 14:51:32.869-08:00 BatteryA, 0.25 02/07/2019 14:55:45.343-08:00, BatteryB, 0.50 02/07/2019 14:58:25.845-08:00, BatteryC, 0.34
我執行以下閱讀它:val csvDataFrame = sqlContext.read.format (csv) .option .option(“標題”、“true”) (“treatEmptyValuesAsNulls”、“true”) .option .option (“inferSchema”、“true”)(“模式”、“DROPMALFORMED”) .option (“timestampFormat”、“MM / dd / yyyy HH: MM: ss.SSSZZ”) .load(“路徑/ / file.csv”)
csvDataFrame.printSchema ()
但無論如何我用時間戳模式,第一列總是推斷為字符串。csvDataFrame: org.apache.spark.sql。DataFrame時間戳字符串名稱:字符串值:雙
我不是一個Java / Scala開發人員和我新火花/磚。我找不到任何地方哪個datetime格式器火花使用解析值。
至少根據Pyspark文檔(https://spark.apache.org/docs/latest/api/python/pyspark.sql.html pyspark.sql.DataFrameReader):它說:
”
java.text.SimpleDateFormat
。這適用於日期類型。如果沒有設置,它使用默認值,yyyy-MM-dd
。java.text.SimpleDateFormat
。這適用於時間戳的類型。如果沒有設置,它使用默認值,yyyy-MM-dd 'HH: mm: ss.SSSXXX
。”
我可以想象,這些是相同的對於編寫scala。
嗨@Emiliano Parizzi,
你可以解析後加載的時間戳文件使用withColumn (cf。https://stackoverflow.com/questions/39088473/pyspark-dataframe-convert-unusual-string-format-to-time..。。
從pyspark。sql從pyspark.sql進口行。功能導入to_timestamp
(sc .parallelize([行(dt = ' 02/07/2019 14:51:32.869-08:00 '))) .toDF () .withColumn(“解析”,to_timestamp (“dt”、“MM / dd / yyyy HH: MM: ss.SSSXXX”)),告訴(假的))
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - dt + | | | +解析- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + | 02/07/2019 14:51:32.869-08:00 | 2019-02-07 22:51:32 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - +
#在python中:明確定義的模式,閱讀在CSV數據使用定義的模式和一個時間戳格式(和一個額外的列用於分區;這部分是可選的)csvSchema = StructType ([StructField(“時間戳”,TimestampType(),真的),StructField(“名字”,StringType(),真的),StructField(“價值”,倍增式(),真的)))
df =火花。讀\ . csv (file_path頭= True,多行= True,逃避=“\”“、模式= csvSchema timestampFormat = " MM / dd / yyyy HH: MM: ss。SSSZZ”) \ .withColumn(“年”,date_format(坳(“時間戳”)、“yyyy”) .cast (IntegerType ())) \ .withColumn(“月”,date_format(坳(“時間戳”)、“毫米”).cast (IntegerType ()))
顯示器(df)