2016-03-03 13 views
7

मैं एक pyspark कार्यक्रम शुरू कर रहा हूँ जार जोड़ेpyspark स्वसंपूर्ण को

from pyspark import SparkContext, SparkConf 

SparkConf().setAppName("Example").setMaster("local[2]") 
sc = SparkContext(conf=conf) 

मैं कैसे इस तरह के Databricks सीएसवी जार के रूप में जार निर्भरता कैसे जोड़ूँ? कमांड लाइन का उपयोग करना, मैं इस तरह पैकेज जोड़ सकते हैं:

$ pyspark/spark-submit --packages com.databricks:spark-csv_2.10:1.3.0 

लेकिन मैं इनमें से किसी भी प्रयोग नहीं कर रहा हूँ। कार्यक्रम एक बीर कार्यप्रवाह का उपयोग नहीं कर रहा है चिंगारी के लिये भेज मैं अपने ./foo.py कार्यक्रम चलाने के लिए सक्षम होना चाहिए का हिस्सा है और यह सिर्फ काम करना चाहिए।

  • मुझे पता है कि आप अतिरिक्त क्लासपाथ के लिए स्पार्क गुण सेट कर सकते हैं लेकिन आपको प्रत्येक नोड में जेएआर फाइलों की प्रतिलिपि बनाना है?
  • की कोशिश की conf.set ("spark.jars", "jar1, jar2") है कि एक py4j CNF अपवाद

उत्तर

4

किसी भी निर्भरता spark.jars.packages का उपयोग कर पारित किया जा सकता के साथ भी काम नहीं किया (spark.jars सेटिंग के रूप में काम करना चाहिए अच्छी तरह से) $SPARK_HOME/conf/spark-defaults.conf में संपत्ति। यह निर्देशांक की एक अल्पविराम से अलग सूची होना चाहिए।

और संकुल या classpath गुण से पहले JVM शुरू कर दिया और this happens during SparkConf initialization को सेट करना है। इसका मतलब है कि SparkConf.set विधि यहाँ नहीं किया जा सकता।

वैकल्पिक दृष्टिकोण से पहले SparkConf वस्तु आरंभ नहीं हो जाता PYSPARK_SUBMIT_ARGS वातावरण चर सेट करने के लिए है:

import os 
from pyspark import SparkConf 

SUBMIT_ARGS = "--packages com.databricks:spark-csv_2.11:1.2.0 pyspark-shell" 
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS 

conf = SparkConf() 
sc = SparkContext(conf=conf) 
+1

यह समाधान कम से कम नोटबुक के भीतर मेरे लिए काम नहीं करता है; मुझे अभी भी क्लास-नहीं मिली त्रुटियां मिलती हैं। वास्तव में, स्पार्क द्वारा उठाए गए पर्यावरण चरों में से कोई भी नहीं उठाया जाता है। ऐसा लगता है कि 'os.environ' केवल उस प्रक्रिया के लिए पर्यावरण सेट करता है जिसमें पाइथन कर्नेल चल रहा है, लेकिन कोई भी उपप्रोसेस उन पर्यावरण चर को नहीं उठाता है। दूसरे शब्दों में, यह 'निर्यात ... के बराबर नहीं कर रहा है। कोई विचार? – santon

+0

'subprocess.Popen' 'env' तर्क लेता है जहां आप वर्तमान वातावरण की एक प्रति पास कर सकते हैं। – zero323

2

अंत में एक से अधिक प्रयासों के बाद भी इस सवाल का जवाब मिल गया। उत्तर स्पार्क-सीएसवी जार का उपयोग करने के लिए विशिष्ट है। हार्ड ड्राइव में एक फ़ोल्डर बनाएँ डी: \ स्पार्क \ spark_jars। जगह वहाँ निम्नलिखित जार:

  1. चिंगारी csv_2.10-1.4.0.jar
  2. कॉमन्स-सीएसवी-1.1.jar (इस संस्करण मैं उपयोग कर रहा हूँ है)
  3. univocity-पारसर्स-1.5 चिंगारी से सीएसवी के लिए आवश्यक

2 और 3 हैं निर्भरता .1.jar, इसलिए उन दो फाइलों भी डाउनलोड करने की जरूरत है। अपनी conf निर्देशिका पर जाएं जहां आपने स्पार्क डाउनलोड किया है। चिंगारी defaults.conf फ़ाइल में पंक्ति जोड़ें:

spark.driver.extraClassPath डी:/स्पार्क/spark_jars/*

तारांकन सभी जार शामिल होना चाहिए। अब अजगर चलाने के लिए, आप सामान्य रूप से SparkContext, SQLContext पैदा करते हैं। अब आप के रूप में

sqlContext.read.format('com.databricks.spark.csv').\ 
options(header='true', inferschema='true').\ 
load('foobar.csv') 
0
import os 
import sys 
spark_home = os.environ.get('SPARK_HOME', None) 
sys.path.insert(0, spark_home + "/python") 
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.10.4-src.zip')) 

यहाँ यह आता है चिंगारी से सीएसवी का उपयोग करने में सक्षम होना चाहिए ....

sys.path.insert(0, <PATH TO YOUR JAR>) 

फिर ...

import pyspark 
import numpy as np 

from pyspark import SparkContext 

sc = SparkContext("local[1]") 
. 
. 
. 
+1

काम नहीं लग रहा है। –

4

यहां कई दृष्टिकोण (स्थापित करने ENV वार्स,, आदि $ SPARK_HOME/conf/चिंगारी defaults.conf को जोड़ने ...) जवाब में से कुछ पहले से ही इन कवर कर रहे हैं। मैं विशेष रूप से जुपीटर नोटबुक का उपयोग करके और नोटबुक के भीतर स्पार्क सत्र बनाने के लिए अतिरिक्त उत्तर जोड़ना चाहता था।

spark = SparkSession.builder.appName('my_awesome')\ 
    .config('spark.jars.packages', 'org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0')\ 
    .getOrCreate() 

कोड की इस पंक्ति मैं और (कोई ENVs या conf फ़ाइल परिवर्तन) कुछ भी करने की जरूरत नहीं थी का उपयोग करना: यहाँ समाधान है कि मेरे लिए सबसे अच्छा काम किया है (मेरे मामले में मैं काफ्का पैकेज लोड चाहता था)।

+0

यह विकल्प अक्सर कहीं और अनदेखा/अनियंत्रित लगता है ... जैसा कि कहा गया है, यह जुपीटर उपयोगकर्ताओं के लिए एक अच्छा समाधान है। –