2017-09-26 8 views
1

Spark 2.1から2.2にアップグレードしようとしています。私は場所(CSVまたはJSON)にデータフレームを読み書きしようとすると、私はこのエラーが発生します:Spark 2.2不正なパターンコンポーネント:XXX java.lang.IllegalArgumentException:不正なパターンコンポーネント:XXX

Illegal pattern component: XXX 
java.lang.IllegalArgumentException: Illegal pattern component: XXX 
at org.apache.commons.lang3.time.FastDatePrinter.parsePattern(FastDatePrinter.java:282) 
at org.apache.commons.lang3.time.FastDatePrinter.init(FastDatePrinter.java:149) 
at org.apache.commons.lang3.time.FastDatePrinter.<init>(FastDatePrinter.java:142) 
at org.apache.commons.lang3.time.FastDateFormat.<init>(FastDateFormat.java:384) 
at org.apache.commons.lang3.time.FastDateFormat.<init>(FastDateFormat.java:369) 
at org.apache.commons.lang3.time.FastDateFormat$1.createInstance(FastDateFormat.java:91) 
at org.apache.commons.lang3.time.FastDateFormat$1.createInstance(FastDateFormat.java:88) 
at org.apache.commons.lang3.time.FormatCache.getInstance(FormatCache.java:82) 
at org.apache.commons.lang3.time.FastDateFormat.getInstance(FastDateFormat.java:165) 
at org.apache.spark.sql.catalyst.json.JSONOptions.<init>(JSONOptions.scala:81) 
at org.apache.spark.sql.catalyst.json.JSONOptions.<init>(JSONOptions.scala:43) 
at org.apache.spark.sql.execution.datasources.json.JsonFileFormat.inferSchema(JsonFileFormat.scala:53) 
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:177) 
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:177) 
at scala.Option.orElse(Option.scala:289) 
at org.apache.spark.sql.execution.datasources.DataSource.getOrInferFileFormatSchema(DataSource.scala:176) 
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:366) 
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178) 
at org.apache.spark.sql.DataFrameReader.json(DataFrameReader.scala:333) 
at org.apache.spark.sql.DataFrameReader.json(DataFrameReader.scala:279) 

私はDATEFORMATのデフォルト値を設定しておりませんので、それが来ている場合、私は理解していませんよから。

spark.createDataFrame(objects.map((o) => MyObject(t.source, t.table, o.partition, o.offset, d))) 
    .coalesce(1) 
    .write 
    .mode(SaveMode.Append) 
    .partitionBy("source", "table") 
    .json(path) 

私はまだこれでエラーが発生します。 ルート | - 名前:ここでは

import org.apache.spark.sql.{SaveMode, SparkSession} 
val spark = SparkSession.builder.appName("Spark2.2Test").master("local").getOrCreate() 
import spark.implicits._ 
val agesRows = List(Person("alice", 35), Person("bob", 10), Person("jill", 24)) 
val df = spark.createDataFrame(agesRows).toDF(); 

df.printSchema 
df.show 

df.write.mode(SaveMode.Overwrite).csv("my.csv") 

は、スキーマである文字列(= NULL可能真) | - 年齢:ロング(NULL可能= false)

+2

の正しいバージョンを使用していることを確認します。 MyObjectクラスの定義を共有していただけますか?手動でオブジェクトをjsonに変換してから、文字列として保存しようとします。 –

+0

ケースクラスMyObject(ソース:String、テーブル:String、パーティション:Int、オフセット:Long、updatedOn:String) – Lee

+0

日付フィールドをStringとして読み書きします。 SimpleDateFormat –

答えて

5

が答えを見つけました。

timestampFormatのデフォルトはyyyy-MM-dd'T'HH:mm:ss.SSSXXXです。これは不正な引数です。データフレームを書き込むときに設定する必要があります。

解決方法は、タイムゾーンを含むZZに変更することです。

df.write 
.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ") 
.mode(SaveMode.Overwrite) 
.csv("my.csv") 
+2

を使用して手動で日付フィールドを操作するファイルを読み込もうとしている場合: 'df = spark.read.option( 'timestampFormat'、 'yyyy/MM/dd HH:mm:ss ZZ')。json(PATH_TO_FILE ) ' – Will

2

あなたは私はあなたのコードに何か問題が表示されていないコモンズ-lang3

<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-lang3</artifactId> 
    <version>3.5</version> 
</dependency> 
関連する問題