2017-11-24 2 views
0

私はSpark 1.6.2でPython Sparkクライアント(yarn-clientモードで動作)を開発中です。ここで重要なことは、常にクライアントマシンにあります。Pythonスクリプトを作成することはできませんが、スクリプトをPythonスクリプトとして実行する必要があります。プログラムでDatabricks spark-csvをSpark 1.6.2クライアントに追加する

コードの特定の時点で、Spark Dataframeとして(つまりSQLコンテキストを使用して)HDFS内にCSVファイルをロードする必要があります。ご存じのように、Spark 1.6.2にはCSVベースのデータフレームのネイティブサポートはなく、Databricks spark-csvを使用する必要があります。

次のようにデータロード文は次のとおりです。

df = sql_context.read.load(format='com.databricks.spark.csv', path=url, header=True, inferSchema=False, delimiter=',') 

問題がcom.databricks.spark.csvではが見つかりません。

私はDatabricks spark-csv jarsをダウンロードしてどこかに置く必要があることを知っています。問題はどこですか?これはクライアントマシンまたはクラスタ内の要件ですか?

私は知らないので、私は成功せず、クライアントマシンでこれを試してみた:

  • export PYTHONPATH=/path/where/jars/were/downloaded/
  • conf = SparkConf().set('spark.jars', '/path/where/jars/were/downloaded/')
  • conf = SparkConf().set('spark.driver.extraClassPath', '/path/where/jars/were/downloaded/')。 [ref]

私は、あまりにも成功せず、スパーククラスタでこれを試してみた:

  • はAmbariを通じてカスタム火花デフォルトプロパティspark.jarsを設定します。
  • Ambariからカスタムspark-defaultsプロパティspark.driver.extraClassPathを設定します。

私はどんなスパークスクリプトを実行していないので、--jarsまたは--packagesが、私には適していませんように私はあなたにそのコマンドラインオプションを覚えているよ:)このようにjarファイルを設定することなど

他のソリューションを、 addJar()を使用したSparkコンテキストは、Spark 1.6.2が実装していないため動作しません。

私のコードがDatabricks spark-csv jarをどのように見つけることができるかについての考え方はありますか?

念のため、これはエラートレースです:私が読んだ

java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.csv. Please find packages at http://spark-packages.org 
     at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.lookupDataSource(ResolvedDataSource.scala:77) 
     at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:102) 
     at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:119) 
     at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:109) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231) 
     at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381) 
     at py4j.Gateway.invoke(Gateway.java:259) 
     at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133) 
     at py4j.commands.CallCommand.execute(CallCommand.java:79) 
     at py4j.GatewayConnection.run(GatewayConnection.java:209) 
     at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.ClassNotFoundException: com.databricks.spark.csv.DefaultSource 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:359) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:348) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:347) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     at org.apache.spark.sql.execution.datasources.ResolvedDataSource$$anonfun$4$$anonfun$apply$1.apply(ResolvedDataSource.scala:62) 
     at org.apache.spark.sql.execution.datasources.ResolvedDataSource$$anonfun$4$$anonfun$apply$1.apply(ResolvedDataSource.scala:62) 
     at scala.util.Try$.apply(Try.scala:161) 
     at org.apache.spark.sql.execution.datasources.ResolvedDataSource$$anonfun$4.apply(ResolvedDataSource.scala:62) 
     at org.apache.spark.sql.execution.datasources.ResolvedDataSource$$anonfun$4.apply(ResolvedDataSource.scala:62) 
     at scala.util.Try.orElse(Try.scala:82) 
     at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.lookupDataSource(ResolvedDataSource.scala:62) 
     ... 14 more 

他のポスト...事前に

感謝。

答えて

0

最後に、私はDatabricksのGithubでthis問題を発見し、@のdrorataの答えは私のために働いた:

export PACKAGES="com.databricks:spark-csv_2.11:1.3.0" 
export PYSPARK_SUBMIT_ARGS="--packages ${PACKAGES} pyspark-shell" 

を上記の環境変数をエクスポートすることで、Databrickスパーク-CSVパッケージ(および依存関係が)ここで、私のローカルにダウンロード.ivy2フォルダに保存され、Spark Contextの作成中に自動的にクラスタにアップロードされます。

関連する問題