2015-11-12 14 views
5

मैं दो CSV फ़ाइलों है:OrientDB ईटीएल का उपयोग कैसे करें किनारों बनाने के लिए केवल

पहले युक्त ~ निम्न स्वरूप में 500M रिकॉर्ड

id,name
10000023432,Tom User
13943423235,Blah Person

दूसरा युक्त ~ निम्न स्वरूप

में 1.5B मित्र संबंधों

fromId,toId
10000023432,13943423235

मैंने पहली सीएसवी फ़ाइल से शिखर बनाने के लिए ओरिएंट डीबी ईटीएल उपकरण का उपयोग किया। अब, मुझे बस उनके बीच दोस्ती कनेक्शन स्थापित करने के लिए किनारों को बनाने की जरूरत है।

मैं ईटीएल json फ़ाइल के कई विन्यास की कोशिश की है अब तक, नवीनतम इस एक होने:

{ 
    "config": {"parallel": true}, 
    "source": { "file": { "path": "path_to_file" } }, 
    "extractor": { "csv": {} }, 
    "transformers": [ 
     { "vertex": {"class": "Person", "skipDuplicates": true} }, 
     { "edge": { "class": "FriendsWith", 
        "joinFieldName": "from", 
        "lookup": "Person.id", 
        "unresolvedLinkAction": "SKIP", 
        "targetVertexFields":{ 
         "id": "${input.to}" 
        }, 
        "direction": "out" 
        } 
     }, 
     { "code": { "language": "Javascript", 
        "code": "print('Current record: ' + record); record;"} 
     } 
    ], 
    "loader": { 
     "orientdb": { 
      "dbURL": "remote:<DB connection string>", 
      "dbType": "graph", 
      "classes": [ 
       {"name": "FriendsWith", "extends": "E"} 
      ], "indexes": [ 
       {"class":"Person", "fields":["id:long"], "type":"UNIQUE" } 
      ] 
     } 
    } 
} 

लेकिन दुर्भाग्य से, यह भी "से" के साथ शिखर बनाता है और "से" संपत्ति के अलावा किनारे बनाने के लिए।

Error in Pipeline execution: com.orientechnologies.orient.etl.transformer.OTransformException: edge: input type '[email protected]3 
6a8' is not supported 
Exception in thread "OrientDB ETL pipeline-0" com.orientechnologies.orient.etl.OETLProcessHaltedException: Halt 
     at com.orientechnologies.orient.etl.OETLPipeline.execute(OETLPipeline.java:149) 
     at com.orientechnologies.orient.etl.OETLProcessor$2.run(OETLProcessor.java:341) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: com.orientechnologies.orient.etl.transformer.OTransformException: edge: input type '[email protected]36a8' is not suppor 
ted 
     at com.orientechnologies.orient.etl.transformer.OEdgeTransformer.executeTransform(OEdgeTransformer.java:107) 
     at com.orientechnologies.orient.etl.transformer.OAbstractTransformer.transform(OAbstractTransformer.java:37) 
     at com.orientechnologies.orient.etl.OETLPipeline.execute(OETLPipeline.java:115) 
     ... 2 more 

मैं यहाँ क्या याद आ रही है:

जब मैं शिखर ट्रांसफार्मर निकालने का प्रयास करें, ETL प्रक्रिया एक त्रुटि फेंकता है?

उत्तर

0

जावा एपीआई के साथ आप सीएसवी पढ़ सकता है और उसके बाद किनारों

 String nomeYourDb = "nomeYourDb"; 
     OServerAdmin serverAdmin; 
     try { 
      serverAdmin = new OServerAdmin("remote:localhost/"+nomeYourDb).connect("root", "root"); 
      if (serverAdmin.existsDatabase()) { 
       OrientGraph g = new OrientGraph("remote:localhost/"+nomeYourDb); 
       String csvFile = "path_to_file"; 
       BufferedReader br = null; 
       String line = ""; 
       String cvsSplitBy = " "; // your separator 
       try { 
        br = new BufferedReader(new FileReader(csvFile)); 
        int index=0; 
        while ((line = br.readLine()) != null) { 
         if(index==0){ 
          index=1; 
         } 
         else{ 
          String[] ids = line.split(cvsSplitBy); 
          String personFrom="(select from Person where id='"+ids[0]+"')"; 
          String personTo="(select from Person where id='"+ids[1]+"')"; 
          String query="create edge FriendsWith from "+personFrom+" to "+personTo; 
          g.command(new OCommandSQL(query)).execute(); 
         } 
        } 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       finally { 
       if (br != null) { 
         br.close(); 
       } 
      } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
+0

मेरे पास जावा एपीआई का उपयोग करके अपना खुद का लोडर है। मैं सोच रहा था कि ईटीएल उपकरण का उपयोग करना संभव है, क्योंकि टूल में स्वचालित समांतरता हुक हैं। हालांकि उत्तर के लिए धन्यवाद। – lambdapilgrim

5

आप इन ईटीएल ट्रांसफार्मर के साथ किनारों आयात कर सकते हैं बनाने के लिए:

"transformers": [ 
    { "merge": { "joinFieldName": "fromId", "lookup": "Person.id" } }, 
    { "vertex": {"class": "Person", "skipDuplicates": true} }, 
    { "edge": { "class": "FriendsWith", 
       "joinFieldName": "toId", 
       "lookup": "Person.id", 
       "direction": "out" 
       } 
    }, 
    { "field": { "fieldNames": ["fromId", "toId"], "operation": "remove" } } 
] 

"मर्ज" ट्रांसफार्मर वर्तमान में शामिल हो जाएगा संबंधित व्यक्ति रिकॉर्ड के साथ सीएसवी लाइन (यह थोड़ा अजीब है लेकिन किसी कारण से यह स्रोत व्यक्ति के साथ आईडी से संबद्ध होना आवश्यक है)।

"फ़ील्ड" ट्रांसफार्मर विलय अनुभाग द्वारा जोड़े गए सीएसवी फ़ील्ड को हटा देगा। आप "फ़ील्ड" ट्रांसफॉर्मर के बिना आयात को देखने के लिए भी कोशिश कर सकते हैं।

संबंधित मुद्दे