2016-08-11 16 views
2

CSVファイルからDataFrameを読み込みます。ここで、最初の列はイベントの日付と時刻です。SparkでDataFrameスキーマのDateType変換を定義する

2016年8月8日07:45:28 + 03

以下のコードでは、それがどのように日付にこのような文字列を変換するためのスキーマ定義の中に指定することが可能ですか?それはスキーマ定義の日付への変換文字列を指定することは不可能であることのように見えます

java.lang.NumberFormatException: For input string: "28+03" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at java.sql.Timestamp.valueOf(Timestamp.java:259) 
    at org.apache.spark.sql.catalyst.util.DateTimeUtils$.stringToTime(DateTimeUtils.scala:135) 
    at org.apache.spark.sql.execution.datasources.csv.CSVTypeCast$.castTo(CSVInferSchema.scala:291) 
    at org.apache.spark.sql.execution.datasources.csv.CSVRelation$$anonfun$csvParser$3.apply(CSVRelation.scala:115) 
    at org.apache.spark.sql.execution.datasources.csv.CSVRelation$$anonfun$csvParser$3.apply(CSVRelation.scala:84) 
    at org.apache.spark.sql.execution.datasources.csv.CSVFileFormat$$anonfun$buildReader$1$$anonfun$apply$1.apply(CSVFileFormat.scala:125) 
    at org.apache.spark.sql.execution.datasources.csv.CSVFileFormat$$anonfun$buildReader$1$$anonfun$apply$1.apply(CSVFileFormat.scala:124) 

答えて

1

val df:DataFrame = spark.read.options(Map(
    "header" -> "true" 
)).schema(StructType(
    StructField("EventTime", DataTypes.DateType, false) :: 
    Nil 
)).csv("C:/qos1h.csv") 

このコードは失敗します。ただし、DataFrameReader.csvメソッドdocumentationには、各DateTypeフィールドのオプションを使用して日付書式文字列を指定する方法に関する情報があります。ここで

は固定コードです:

val df:DataFrame = spark.read.options(Map(
    "header" -> "true", 
    "dateFormat" -> "yyyy-MM-dd HH:mm:ssX" 
)).schema(StructType(
    StructField("EventTime", DataTypes.DateType, false) :: 
    Nil 
)).csv("C:/qos1h.csv") 
関連する問題