Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark 2.2非法模式组件:XXX java.lang.IllegalArgumentException:非法模式组件:XXX_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

Scala Spark 2.2非法模式组件:XXX java.lang.IllegalArgumentException:非法模式组件:XXX

Scala Spark 2.2非法模式组件:XXX java.lang.IllegalArgumentException:非法模式组件:XXX,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,我正在尝试从Spark 2.1升级到2.2。当我尝试读取或写入数据帧到某个位置(CSV或JSON)时,我收到以下错误: Illegal pattern component: XXX java.lang.IllegalArgumentException: Illegal pattern component: XXX at org.apache.commons.lang3.time.FastDatePrinter.parsePattern(FastDatePrinter.java:282) at o

我正在尝试从Spark 2.1升级到2.2。当我尝试读取或写入数据帧到某个位置(CSV或JSON)时,我收到以下错误:

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)
我仍然得到以下错误:

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")
以下是模式: 根 |--名称:字符串(nullable=true) |--年龄:long(nullable=false)

我找到了答案

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")

确保您使用的是正确版本的commons-lang3

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.5</version>
</dependency>

org.apache.commons
commons-lang3
3.5

使用commons-lang3-3.5.jar修复了原始错误。我没有检查源代码来说明原因,但这并不奇怪,因为最初的异常发生在org.apache.commons.lang3.time.FastDatePrinter.parsePattern(FastDatePrinter.java:282)。我还注意到文件/usr/lib/spark/jars/commons-lang3-3.5.jar(在一个EMR集群实例上),它也建议使用一致的版本。

我也遇到了这个问题,我的解决方案(原因)是: 因为我把一个错误格式的json文件放到了hdfs中。
在我输入正确的文本或json文件后,它可以正常运行。

我看不出您的代码有任何错误。你能分享MyObject类定义吗?尝试手动将对象转换为json,然后尝试将stringcase类MyObject(源:String,表:String,分区:Int,偏移量:Long,updateOn:String)读写日期字段另存为String。如果您试图读取文件,请使用SimpleDataFormatalSO手动操作日期字段:
df=spark.read.option('timestampFormat','yyyy/MM/dd HH:MM:ss ZZ').json(路径到文件)
Correct,这仅适用于CSV和json。奇怪的是。。。我的输出中没有时间戳。在之前的筛选阶段中有一个时间戳列,但仍然需要此选项来避免堆栈转储。为什么commons-lang3在这里有一些事情要做?我还对CDH中的一个解释感兴趣,hive-exec-1.1.0-cdh5.15.1.jar还有类“FastDateFormat”,它不支持默认格式“yyy-MM-dd'T'HH:MM:ss.SSSXXX”org.apache.spark.sql.catalyst.json.JSONOptions的。因此,确保commons-lang3.3.5jar位于类路径中。在SBT中,使用compile选项添加依赖项。“org.apache.commons”%“commons-lang3”%“3.5”%“compile”文件中没有时间戳,只有年代,它们是长的。谢谢你的评论。
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.5</version>
</dependency>