hadoop - Cloudera में serde के साथ JSON फ़ाइल को लोड करना




hive apache-pig (2)

मैं इस बैग संरचना के साथ एक JSON फ़ाइल के साथ काम करने की कोशिश कर रहा हूं:

{
   "user_id": "kim95",
   "type": "Book",
   "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.",
   "year": "1995",
   "publisher": "ACM Press and Addison-Wesley",
   "authors": [
      {
         "name": "null"
      }
   ],
   "source": "DBLP"
}
{
   "user_id": "marshallo79",
   "type": "Book",
   "title": "Inequalities: Theory of Majorization and Its Application.",
   "year": "1979",
   "publisher": "Academic Press",
   "authors": [
      {
         "name": "Albert W. Marshall" 
      },
      {
         "name": "Ingram Olkin"
      }
   ],
   "source": "DBLP"
}

मैंने हाइव के लिए JSON डेटा को लोड करने के लिए serde का उपयोग करने की कोशिश की। मैंने उन दोनों तरीकों का पालन किया जो मैंने यहां देखा था: http://blog.cloudera.com/blog/2012/12/how-to-use-a-serde-in-apache-hive/

इस कोड के साथ:

CREATE EXTERNAL TABLE IF NOT EXISTS serd (
           user_id:string, 
           type:string, 
           title:string,
           year:string,
           publisher:string,
           authors:array<struct<name:string>>,
           source:string)       
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION '/user/hdfs/data/book-seded_workings-reduced.json';

मुझे यह त्रुटि मिली:

error while compiling statement: failed: parseexception line 2:17 cannot recognize input near ':' 'string' ',' in column type

मैं एलन ने इस संस्करण की कोशिश की: https://github.com/rcongiu/Hive-JSON-Serde

जिसने एक अलग त्रुटि दी:

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Cannot validate serde: org.openx.data.jsonserde.JsonSerde

कोई उपाय?

मैं यह भी जानना चाहता हूं कि 'लेखकों' में 'नाम' फ़ील्ड पर क्वेरी करने के लिए इस तरह से JSON के साथ काम करने के विकल्प क्या हैं I क्या यह सुअर या हाइव है?

मैंने इसे पहले ही "tsv" फ़ाइल में बदल दिया है लेकिन, चूंकि मेरे लेखकों का कॉलम एक ट्यूपल है, मुझे नहीं पता कि कैसे हाइव के साथ 'नाम' पर अनुरोध करता है, अगर मैं इस फ़ाइल से तालिका का निर्माण करता हूं। क्या मुझे "एसएसवी" रूपांतरण के लिए मेरी स्क्रिप्ट बदलनी चाहिए या इसे रखना चाहिए? या क्या हाइव या सुअर के साथ कोई विकल्प है?


हाइव ने JSON के लिए समर्थन में निर्मित नहीं किया है। तो जेपीएसन को हाइव के साथ उपयोग करने के लिए हमें तीसरे भाग के जार का उपयोग करना होगा: https://github.com/rcongiu/Hive-JSON-Serde

आपके पास तालिका विवरण बनाने के साथ कुछ समस्याएं हैं इसे ऐसा दिखना चाहिए:

CREATE EXTERNAL TABLE IF NOT EXISTS serd ( 
user_id string,type string,title string,year string,publisher string,authors array<string>,source:string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION...

JSON अभिलेखों का उपयोग कर आप अपने अभिलेख को इस तरह एक पंक्ति में रखते हैं:

{"user_id": "kim95", "type": "Book", "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.", "year": "1995", "publisher": "ACM Press and Addison-Wesley", "authors": [{"name":"null"}], "source": "DBLP"} 
{"user_id": "marshallo79", "type": "Book", "title": "Inequalities: Theory of Majorization and Its Application.", "year": "1979", "publisher": "Academic Press","authors": [{"name":"Albert W. Marshall"},{"name":"Ingram Olkin"}], "source": "DBLP"}

जीआईटी से परियोजना डाउनलोड करने के बाद आपको इस परियोजना को संकलित करने की ज़रूरत है जो एक जार पैदा करेगा जिसे आपको टेबल कथन बनाने से पहले हाइव सत्र में इस जार को जोड़ने की आवश्यकता होगी।

आशा करता हूँ की ये काम करेगा...!!!


जार जोड़ने के लिए केवल सत्र में जोड़ें जो उपलब्ध नहीं होगा और अंत में यह त्रुटि हो रही है हायर पर सभी नोड्स पर जार लोड करें और मानचित्र नीचे के स्थान की तरह पथ को कम करें ताकि हिवाइव और मैप कम करें घटक इसे जब भी कहा जाए, तब यह चुन लें।

  1. /hadoop/CDH_5.2.0_Linux_parcel/parcels/CDH-5.2.0- 1.cdh5.2.0.p0.36 / lib / hive / lib / json-serde-1.3.6-जार-के-निर्भरताएं.जर

  2. /hadoop/CDH_5.2.0_Linux_parcel/parcels/CDH-5.2.0-1.cdh5.2.0.p0.36/lib/hadoop-mapreduce/lib/json-serde-1.3.6-jar-with-dependencies.jar

नोट: यह पथ क्लस्टर में बदलता रहता है।