2016-08-11 5 views
2

CSV 파일에서 DataFrame을 읽습니다. 첫 번째 열은 이벤트 날짜와 시간입니다. 예 :Spark의 DataFrame 스키마에 대한 날짜 유형 변환 정의

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") 
: 여기

는 고정 코드
관련 문제