2015-11-05 65 views
1

将红移表保存为s3作为parquet文件的问题...这是来自日期字段。我将尝试将列转换为long,然后将其存储为现在的unix时间戳。Spark Redshift保存为s3拼图

Caused by: java.lang.NumberFormatException: multiple points 
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1110) 
at java.lang.Double.parseDouble(Double.java:540) 
at java.text.DigitList.getDouble(DigitList.java:168) 
at java.text.DecimalFormat.parse(DecimalFormat.java:1321) 
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1793) 
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1455) 
at com.databricks.spark.redshift.Conversions$$anon$1.parse(Conversions.scala:54) 
at java.text.DateFormat.parse(DateFormat.java:355) 
at com.databricks.spark.redshift.Conversions$.com$databricks$spark$redshift$Conversions$$parseTimestamp(Conversions.scala:67) 
at com.databricks.spark.redshift.Conversions$$anonfun$1.apply(Conversions.scala:122) 
at com.databricks.spark.redshift.Conversions$$anonfun$1.apply(Conversions.scala:108) 
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) 
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108) 
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) 
at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:108) 
at com.databricks.spark.redshift.Conversions$.com$databricks$spark$redshift$Conversions$$convertRow(Conversions.scala:108) 
at com.databricks.spark.redshift.Conversions$$anonfun$createRowConverter$1.apply(Conversions.scala:135) 
at com.databricks.spark.redshift.Conversions$$anonfun$createRowConverter$1.apply(Conversions.scala:135) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328) 
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer.writeRows(WriterContainer.scala:241) 
... 8 more 

这是我的依赖关系的gradle:

dependencies { 

compile 'com.amazonaws:aws-java-sdk:1.10.31' 
compile 'com.amazonaws:aws-java-sdk-redshift:1.10.31' 
compile 'org.apache.spark:spark-core_2.10:1.5.1' 
compile 'org.apache.spark:spark-sql_2.10:1.5.1' 
compile 'com.databricks:spark-redshift_2.10:0.5.1' 
compile 'com.fasterxml.jackson.module:jackson-module-scala_2.10:2.6.3' 

} 

编辑1:df.write.parquet( “S3N://bucket/path/log.parquet”)是我如何保存在我使用spark-redshift加载红移数据之后的数据框。

编辑2:我在我的MacBook Air上运行所有这些,也许太多的数据损坏了Dataframe?不确定...当我'限制1000',只是不适用于整个表...所以“查询”的作品,但“表”不在火花红移选项参数。

回答

4

spark-redshift维护人员在这里。我相信您看到的错误是由spark-redshift中的a thread-safety bug引起的(Java DecimalFormat实例不是线程安全的,而且我们在多个线程之间共享单个实例)。

这已在0.5.2 release中得到修复,可在Maven CentralSpark Packages上找到。升级到0.5.2,这应该工作!

+0

感谢您的快速响应!就是这样! – jackar