... но я хочу прочитать содержимое с фиксированного пути
blockquote>Вы не можете, а не в веб-браузере, использовать стандарты и получать доступ к локальному файлу система. Существует огромная разница между тем, чтобы браузер мог прочитать файл, который пользователь специально определил для этой страницы, и разрешить ему читать любой файл, который он хочет. Вы просто не можете делать последнее, не прибегая к механизмам (которые будут запускать элементы безопасности), такие как ActiveX, Flash, подписанные Java-апплеты и т. П. Файл API требует, чтобы в качестве отправной точки по какой-либо причине был создан файл
input
.
С искрами 2.2.0 проблема была исправлена для меня, добавив дополнительную информацию о пути пути для сеанса SparkSession в скрипте python:
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.driver.extraClassPath", "/path/to/jdbc/driver/postgresql-42.1.4.jar") \
.getOrCreate()
См. официальную документацию https: //spark.apache .org / docs / latest / configuration.html
В моем случае искра не запускается из команды cli, а из django framework https://www.djangoproject.com/
У этого человека была аналогичная проблема: http://apache-spark-user-list.1001560.n3.nabble.com/How-to-use-DataFrame-with-MySQL-td22178.html
Обновили ли вы драйверы соединителей до последней версии? Также вы указали класс драйвера при вызове load ()?
Map<String, String> options = new HashMap<String, String>();
options.put("url", "jdbc:mysql://localhost:3306/video_rcmd?user=root&password=123456");
options.put("dbtable", "video");
options.put("driver", "com.mysql.jdbc.Driver"); //here
DataFrame jdbcDF = sqlContext.load("jdbc", options);
В искровом / conf / spark-defaults.conf вы также можете установить spark.driver.extraClassPath и spark.executor.extraClassPath на путь вашего драйвера MySql .jar
Эти опции четко упоминаются в spark docs : --driver-class-path postgresql-9.4.1207.jar --jars postgresql-9.4.1207.jar
Ошибка, которую я делал, упоминала эти параметры после баннера моего приложения.
Однако правильный способ заключается в том, чтобы указать эти параметры сразу после spark-submit:
spark-submit --driver-class-path /somepath/project/mysql-connector-java-5.1.30-bin.jar --jars /somepath/project/mysql-connector-java-5.1.30-bin.jar --class com.package.MyClass target/scala-2.11/project_2.11-1.0.jar
У меня была одна и та же проблема с выполнением заданий над кластером Mesos в режиме кластера.
Чтобы использовать драйвер JDBC, необходимо добавить зависимость к пути к системному классу не к пути класса framework. Я нашел способ сделать это, добавив зависимость в файл spark-defaults.conf
в каждом экземпляре кластера.
Добавляемые свойства: spark.driver.extraClassPath
и spark.executor.extraClassPath
, а путь должен находиться в локальной файловой системе.
spark.driver.extraClassPath не работает в клиентском режиме:
Примечание. В режиме клиента эта конфигурация не должна устанавливаться через SparkConf непосредственно в вашем приложении, поскольку драйвер JVM уже началось в этот момент. Вместо этого задайте это через параметр командной строки -driver-class-path или в файле свойств по умолчанию.
blockquote>Env переменная SPARK_CLASSPATH устарела в Spark 1.0 +.
Сначала вы должны скопировать jdbc-драйвер jars в каждый исполнитель в рамках одного и того же пути локальной файловой системы, а затем использовать следующие опции в spark-submit:
--driver-class-path "driver_local_file_system_jdbc_driver1.jar:driver_local_file_system_jdbc_driver2.jar" --class "spark.executor.extraClassPath=executors_local_file_system_jdbc_driver1.jar:executors_local_file_system_jdbc_driver2.jar"
Например, в случае TeraData вам нужно как terajdbc4.jar, так и tdgssconfig.jar.
Альтернативно изменить compute_classpath.sh на всех рабочих узлах, документация Spark гласит:
Класс драйвера JDBC должен быть видимым для первичного класс загрузчика на сеансе клиента и всех исполнителей. Это связано с тем, что класс DriverManager Java выполняет проверку безопасности, в результате чего он игнорирует все драйверы, которые не видны первоклассному загрузчику классов, когда вы открываете соединение. Один из удобных способов сделать это - изменить compute_classpath.sh на всех рабочих узлах, чтобы включить JAR для драйверов.
blockquote>
Оба драйвера искры и исполнитель нуждаются в драйвере mysql на пути к классу, поэтому укажите
spark.driver.extraClassPath = <path>/mysql-connector-java-5.1.36.jar
spark.executor.extraClassPath = <path>/mysql-connector-java-5.1.36.jar
Существует простой трюк Java для решения вашей проблемы. Вы должны указать экземпляр Class.forName()
. Например:
val customers: RDD[(Int, String)] = new JdbcRDD(sc, () => {
Class.forName("com.mysql.jdbc.Driver")
DriverManager.getConnection(jdbcUrl)
},
"SELECT id, name from customer WHERE ? < id and id <= ?" ,
0, range, partitions, r => (r.getInt(1), r.getString(2)))
Проверьте документы
Я добавляю файл jar в SPARK_CLASSPATH в spark-env.sh, он работает.
export SPARK_CLASSPATH=$SPARK_CLASSPATH:/local/spark-1.6.3-bin-hadoop2.6/lib/mysql-connector-java-5.1.40-bin.jar