2015-10-27 10 views
5

Ben google dataproc ile oluşturduğum bir kıvılcım kümem var. csv kütüphanesini veri tabanlarından kullanabilmek istiyorum (bkz. https://github.com/databricks/spark-csv). Bu yüzden ilk olarak bu gibi test: Bir Spark kümesinde pyspark işinde harici bir kütüphane kullanın google-dataproc

benim kümenin ana düğüm ile bir ssh oturumu başladı sonra ben girişi:

: Sonra

pyspark --packages com.databricks:spark-csv_2.11:1.2.0 

bir pyspark kabuğu başlattı hangi I girdi içinde

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('gs:/xxxx/foo.csv') 
df.show() 

Ve işe yaradı.

sonraki adımım komutunu kullanarak benim ana makineden bu işi başlatmak için geçerli:

gcloud beta dataproc jobs submit pyspark --cluster <my-dataproc-cluster> my_job.py 

Ama burada O çalışmıyor ve bir hata alıyorum. Sanırım --packages com.databricks:spark-csv_2.11:1.2.0'u bir argüman olarak vermedim, ama vermem için 10 farklı yol denedim ve ben yönetmedim.

Sorum şunlardır: Ben pyspark --packages com.databricks:spark-csv_2.11:1.2.0

  • yazdığınız sonra

    1. databricks csv kütüphanesi bunu ithal etmek amacıyla benim job.py bir çizgi yazabilir kuruldu?
    2. veya almak veya yüklemek için gcloud komutuma hangi paramları vermeliyim? o my_job.py tartışma sonrasında gelirse
  • +2

    JARS'ın Pyspark işleri için alınmadığı Dataproc'ta bir hata var. Alternatif bir çözüm arıyorum. Sadece size daha büyük bir hataya baktığımızı ve sizin için bir geçici düzeltme tespit edip edemeyeceğimizi görmemize izin vermek istedim. :) – James

    +0

    hem bir geçici çözüm hem de burada düzeltmek için umut, thx @James! cassandra konektörü ile dataproc'u python ve scala – navicore

    cevap

    9

    Kısa Cevap

    --packagesspark-submit tarafından kabul edilmeyen argümanların sıralamada tuhaflıklar vardır. Dataproc en CLI'den gönderirken Bu sorunu çözmek için aşağıdakileri yapabilirsiniz:

    gcloud beta dataproc jobs submit pyspark --cluster <my-dataproc-cluster> \ 
        --properties spark.jars.packages=com.databricks:spark-csv_2.11:1.2.0 my_job.py 
    

    Temelde, sadece komuta .py dosya önce --properties spark.jars.packages=com.databricks:spark-csv_2.11:1.2.0 ekleyin.

    Uzun Cevap

    Yani, bu aslında gcloud beta dataproc jobs submit pyspark yılında --jars desteği bilinen olmaması daha farklı bir konudur; Dataproc'un özel bir spark-submit -level bayrağı olarak --packages'u açıkça tanımaksızın, uygulama argümanlarından sonra 'u iletmeye çalıştığı anlaşılır, böylece bu kıvılcım gönderimi, --packages'un bir başvuru argümanı olarak doğru bir şekilde ayrıştırmak yerine bir uygulama argümanı olarak geçmesine izin verir. seviye seçeneği.Gerçekten de, bir SSH oturumunda, şu does değil eser:

    # Doesn't work if job.py depends on that package. 
    spark-submit job.py --packages com.databricks:spark-csv_2.11:1.2.0 
    

    Ama argümanlar sırasını anahtarlama pyspark durumda, her iki sıralamalar işe rağmen yine çalışır:

    # Works with dependencies on that package. 
    spark-submit --packages com.databricks:spark-csv_2.11:1.2.0 job.py 
    pyspark job.py --packages com.databricks:spark-csv_2.11:1.2.0 
    pyspark --packages com.databricks:spark-csv_2.11:1.2.0 job.py 
    

    spark-submit job.py'un daha önce pyspark job.py olarak adlandırılan her şey için bir açılan eklenti olması gerekse bile, --packages gibi şeyler için ayrıştırmadaki fark aslında% 100 uyumlu bir geçiş olmadığı anlamına gelir. Bu Spark tarafında takip edilecek bir şey olabilir. --packages Kıvılcım özelliği spark.jars.packages için sadece başka diğer adıdır ve Dataproc en CLI özellikleri gayet destekler beri

    neyse, neyse, bir çözüm bulunmamaktadır. Yani sadece aşağıdakileri yapabilirsiniz: --properties
    my_job.py önce gelmesi gerektiğini

    gcloud beta dataproc jobs submit pyspark --cluster <my-dataproc-cluster> \ 
        --properties spark.jars.packages=com.databricks:spark-csv_2.11:1.2.0 my_job.py 
    

    Not, aksi takdirde bir uygulama argüman olarak yerine yapılandırma bayrağı olarak gönderilen alır. Umarım senin için çalışır! SSH oturumundaki eşdeğer spark-submit --packages com.databricks:spark-csv_2.11:1.2.0 job.py olacaktır.

    +0

    'dan kullanmaya çalışıyoruz. Bu bana yardımcı oldu, ancak şimdi paketime ek olarak yeni bir depo kaydetmeye çalışıyorum. '' --properties spark.jars.packages = org.elasticsearch: 2.4.0, spark.jars.ivy = http: // conjars.org/repo'' kelimelerini eklemeyi denedim ancak bir şekilde iki eğik çizgi bir tanesine dönüştürülecek ve sürücü aşağıdakiler aracılığıyla hata veriyor. Bu hata/iki ileri eğik çizgi ile tam nitelikli bir url sağlamanın uygun yolu hakkında herhangi bir fikriniz var mı: '' thread 'istisnası' ana 'java.lang.IllegalArgumentException: basedir mutlak olmalıdır: http: /conjars.org/repo/local'' – aeneaswiener

    2

    @Dennis'e ek olarak. Birden dış paketleri yüklemek gerekiyorsa, bunu gibi özel bir kaçış karakteri belirtmek gerekir

    Not:

    --properties ^#^spark.jars.packages=org.elasticsearch:elasticsearch-spark_2.10:2.3.2,com.data‌​bricks:spark-avro_2.10:2.0.1 
    

    Not^#^sağ paket listesinin önce. Daha fazla ayrıntı için gcloud topic escaping'a bakın.

    İlgili konular