2014-09-03 16 views
8

में पार्सिंग जेसन मैं स्पार्क के लिए बहुत नया हूं और मैं एक कफका विषय से जेसन के रूप में संरचित डीस्ट्रीम प्राप्त करने की कोशिश कर रहा हूं और मैं प्रत्येक जेसन की सामग्री को पार्स करना चाहता हूं।स्पार्क-स्ट्रीमिंग

{"type":"position","ident":"IBE32JZ","air_ground":"A","alt":"34000","clock":"1409733420","id":"IBE32JZ-1409715361-ed-0002:0","gs":"446","heading":"71","lat":"44.50987","lon":"2.98972","reg":"ECJRE","squawk":"1004","updateType":"A","altChange":" "} 

मैं कम से कम अब के लिए ही अध्यक्ष क्षेत्र को निकालने के लिए, कोशिश कर रहा हूँ और मैं लिफ्ट json पुस्तकालय का उपयोग कर रहा डे डेटा पार्स करने के लिए: json मैं प्राप्त कुछ इस तरह है। मेरे कार्यक्रम इस प्रकार है:

लेकिन यह मुझे अपवाद नीचे फेंकता है:

java.lang.NoClassDefFoundError: scala/reflect/ClassManifest 
    at net.liftweb.json.JsonAST$JValue.extract(JsonAST.scala:300) 
    at aero.catec.stratio.ScalaExample$.parser(ScalaExample.scala:33) 
    at aero.catec.stratio.ScalaExample$$anonfun$2.apply(ScalaExample.scala:48) 
    at aero.catec.stratio.ScalaExample$$anonfun$2.apply(ScalaExample.scala:48) 
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:328) 
    at scala.collection.Iterator$$anon$10.next(Iterator.scala:312) 
    at scala.collection.Iterator$class.foreach(Iterator.scala:727) 
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1157) 
    at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48) 
    at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:103) 
    at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:47) 
    at scala.collection.TraversableOnce$class.to(TraversableOnce.scala:273) 
    at scala.collection.AbstractIterator.to(Iterator.scala:1157) 
    at scala.collection.TraversableOnce$class.toBuffer(TraversableOnce.scala:265) 
    at scala.collection.AbstractIterator.toBuffer(Iterator.scala:1157) 
    at scala.collection.TraversableOnce$class.toArray(TraversableOnce.scala:252) 
    at scala.collection.AbstractIterator.toArray(Iterator.scala:1157) 
    at org.apache.spark.rdd.RDD$$anonfun$28.apply(RDD.scala:1003) 
    at org.apache.spark.rdd.RDD$$anonfun$28.apply(RDD.scala:1003) 
    at org.apache.spark.SparkContext$$anonfun$runJob$4.apply(SparkContext.scala:1083) 
    at org.apache.spark.SparkContext$$anonfun$runJob$4.apply(SparkContext.scala:1083) 
    at org.apache.spark.scheduler.DAGScheduler.runLocallyWithinThread(DAGScheduler.scala:575) 
    at org.apache.spark.scheduler.DAGScheduler$$anon$1.run(DAGScheduler.scala:560) 
Caused by: java.lang.ClassNotFoundException: scala.reflect.ClassManifest 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

बात है अगर एक रन चिंगारी (एक फ़ाइल से पढ़ने) का उपयोग किए बिना ही यह पूरी तरह काम करता है। समस्या तब शुरू होती है जब मैं इसे स्पार्क प्रोग्राम में डालने का प्रयास करता हूं। इसके अलावा, अगर मैं इस तरह कुछ पार्सर फ़ंक्शन को बदलता हूं:

def parser(json: String): JValue = { 
    val parsedJson = parse(json) 
    return (parsedJson \\ "ident") 
} 

यह भी काम करता है। लेकिन जब मैं वास्तविक स्ट्रिंग निकालने का प्रयास करता हूं, तो मुझे एक ही त्रुटि मिलती है।

आपकी मदद के लिए धन्यवाद। मुझे उम्मीद है कि मैंने इसे अच्छी तरह से समझाया था।

+1

यह शायद आपके द्वारा उपयोग किए जा रहे स्कैला संस्करण में एक मेल नहीं है। –

+0

क्या मुझे लगता है कि "paso1.extract [PlaneInfo]" को पार्स किया जाना चाहिए Json.extract [PlaneInfo]? – Gillespie

उत्तर

2

ऐसा इसलिए होता है क्योंकि आप रिकार्ड को क्रमबद्ध/deserialize करने के लिए आवश्यक एक स्काला प्रतिबिंब निर्भरता खो रहे हैं। स्पार्क संस्करण से मेल खाने वाले स्कैला प्रतिबिंबित जार को जोड़ने का प्रयास करें।

युक्ति: "org.scala-लैंग"% "स्केला-प्रतिबिंबित"% Version.scala

0

ओह, एक अच्छे पुराने मुद्दे :-)

मूल रूप से यह इंगित करता है एक संस्करण समस्या: में से एक आपकी निर्भरता स्कैला कंपाइलर के साथ संगत नहीं है जिसका आप वर्तमान में उपयोग कर रहे हैं। क्या आप 2.10 पर हैं?

वाक्यांश "NoClassDefFoundError: स्कैला/प्रतिबिंबित/कक्षा प्रबंधक", मुझे यकीन है कि आपको इस मुद्दे के बारे में पर्याप्त विवरण मिलेगा।