config.json
が小さいJSONファイルとしよう:スパーククラッシュAWS-javaの-SDKとリンクしたときにJSONファイルを読みながら
{
"toto": 1
}
私は、ファイルができるためsc.textFile
とJSONファイルを(読み取り、簡単なコードを作りましたS3、ローカルまたはHDFS上、テキストファイル)が便利ですので
import org.apache.spark.{SparkContext, SparkConf}
object testAwsSdk {
def main(args:Array[String]):Unit = {
val sparkConf = new SparkConf().setAppName("test-aws-sdk").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
val json = sc.textFile("config.json")
println(json.collect().mkString("\n"))
}
}
SBTファイルプルのみspark-core
ライブラリ
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.5.1" % "compile"
)
プログラムは正常に動作し、config.jsonの内容を標準出力に書き出します。
今私はaws-java-sdk、amazonのsdkとリンクしてS3にアクセスしたいと考えています。
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-java-sdk" % "1.10.30" % "compile",
"org.apache.spark" %% "spark-core" % "1.5.1" % "compile"
)
同じコードを実行すると、sparkは次の例外をスローします。
スタックを読むException in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Could not find creator property with name 'id' (in class org.apache.spark.rdd.RDDOperationScope)
at [Source: {"id":"0","name":"textFile"}; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:843)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.addBeanProps(BeanDeserializerFactory.java:533)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:220)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:143)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:409)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:358)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:265)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:245)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:439)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3666)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3558)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2578)
at org.apache.spark.rdd.RDDOperationScope$.fromJson(RDDOperationScope.scala:82)
at org.apache.spark.rdd.RDDOperationScope$$anonfun$5.apply(RDDOperationScope.scala:133)
at org.apache.spark.rdd.RDDOperationScope$$anonfun$5.apply(RDDOperationScope.scala:133)
at scala.Option.map(Option.scala:145)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:133)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:108)
at org.apache.spark.SparkContext.withScope(SparkContext.scala:709)
at org.apache.spark.SparkContext.hadoopFile(SparkContext.scala:1012)
at org.apache.spark.SparkContext$$anonfun$textFile$1.apply(SparkContext.scala:827)
at org.apache.spark.SparkContext$$anonfun$textFile$1.apply(SparkContext.scala:825)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:147)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:108)
at org.apache.spark.SparkContext.withScope(SparkContext.scala:709)
at org.apache.spark.SparkContext.textFile(SparkContext.scala:825)
at testAwsSdk$.main(testAwsSdk.scala:11)
at testAwsSdk.main(testAwsSdk.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
、AWS-javaの-SDKがリンクされているとき、sc.textFile
ファイルはJSONファイルであることを検出しているようですし、ジャクソンは、特定の形式を想定して、それを解析しようとすると、それは当然のことながら見つけることができません。私はaws-java-sdkとリンクする必要があるので、私の質問は
です。なぜ、aws-java-sdk
を追加すると、spark-core
の動作が変更されるのですか?
2回避策はありますか(ファイルはHDFS、S3またはローカルにある可能性があります)?
これは、aws-java-sdkが最新のバージョン2.5.3のjacksonライブラリを使用しており、sparkが古い2.4.4を使用しているためです。私は同じ問題に直面していますが、解決できませんでした。解決策を見つけた場合は、それを共有してください。おかげで –
こんにちはハフィズ...かなりanoyingではないですか?私はその事件をAWSに送付します。彼らは互換性の問題であることを確認しました。彼らは私に明確な解決策を教えていない。できるだけ早くそれを整理しようとします。 – Boris
こんにちはBoris!はい、これはこの問題に直面するのは面倒ですが、私はspark-coreからjackson coreとjacksonモジュールライブラリを除外し、jackson core最新のライブラリ依存関係を追加することで解決しました –