Saya menggunakan python 2.7 dengan ubuntu dan menjalankan spark melalui skrip python menggunakan sparkcontext

Db saya adalah mysql jarak jauh, dengan nama pengguna dan kata sandi.

Saya mencoba menanyakannya menggunakan kode ini

sc = createSparkContext()
sql = SQLContext(sc)
df = sql.read.format('jdbc').options(url='jdbc:mysql://ip:port?user=user&password=password', dbtable='(select * from tablename limit 100) as tablename').load()
print df.head()

Dan dapatkan kesalahan ini

py4j.protocol.Py4JJavaError: Terjadi kesalahan saat memanggil o32.load. : java.sql.SQLException: Tidak ada driver yang cocok

Saya menemukan bahwa saya memerlukan driver JDBC untuk mysql.

Saya mengunduh platform gratis dari di sini

Saya mencoba memasukkannya menggunakan kode ini dalam memulai konteks percikan

conf.set("spark.driver.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")

Dan mencoba menginstalnya menggunakan

sudo apt-get install libmysql-java

Pada mesin master, pada mesin db dan pada mesin yang menjalankan skrip python tanpa hasil.

Edit2

Saya mencoba menggunakan

conf.set("spark.executor.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")

Tampaknya oleh output dari

print sc.getConf().getAll()

Yang mana

[(u'spark.driver.memory', u'3G'), (u'spark.executor.extraClassPath', u'file:///var/nfs/general/mysql-connector-java-5.1.43. jar'), (u'spark.app.name', u'spark-basic'), (u'spark.app.id', u'app-20170830'), (u'spark.rdd.compress', u'True'), (u'spark.master', u'spark://127.0.0.1:7077'), (u'spark.driver.port', u''), (u'spark.serializer. objectStreamReset', u'100'), (u'spark.executor.memory', u'2G'), (u'spark.executor.id', u'driver'), (u'spark.submit.deployMode' , u'client'), (u'spark.driver.host', u''), (u'spark.driver.cores', u'3')]

Bahwa itu termasuk jalur yang benar, tetapi saya masih mendapatkan kesalahan "tidak ada driver" yang sama ...

Apa yang kulewatkan di sini?

Terima kasih

0
thebeancounter 27 Agustus 2017, 14:45

2 jawaban

Jawaban Terbaik

Anda perlu mengatur classpath untuk node driver dan pekerja. Tambahkan yang berikut ini untuk memicu konfigurasi

conf.set("spark.executor.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
conf.set("spark.driver.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")

Atau Anda dapat melewatinya menggunakan

import os
os.environ['SPARK_CLASSPATH'] = "/path/to/driver/mysql.jar"

Untuk spark >=2.0.0 Anda dapat menambahkan daftar toples yang dipisahkan koma ke file spark-defaults.conf yang terletak di direktori spark_home/conf seperti ini

spark.jars     path_2_jar1,path_2_jar2
1
pauli 30 Agustus 2017, 13:57
from pyspark.sql import SparkSession
spark = SparkSession\
    .builder\
    .appName("Word Count")\
    .config("spark.driver.extraClassPath", "/home/tuhin/mysql.jar")\
    .getOrCreate()

dataframe_mysql = spark.read\
    .format("jdbc")\
    .option("url", "jdbc:mysql://ip:port/db_name")\
    .option("driver", "com.mysql.jdbc.Driver")\
    .option("dbtable", "employees").option("user", "root")\
    .option("password", "12345678").load()

print(dataframe_mysql.columns)

"/home/tuhin/mysql.jar" adalah lokasi file jar mysql

0
MD. HUMAYUN KABIR TUHIN 8 Agustus 2018, 12:19