私は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
他のポスト...事前に
感謝。