Моя цель - иметь работающий ноутбук Jupyter с поддержкой pyspark и s3 / s3a. Я как-то дошел до того, что pyspark работал, но я не могу заставить его поддерживать s3 или s3a, независимо от того, сколько я гуглю. Большая часть информации предназначена для Unix / linux или предполагает слишком много. Пожалуйста помоги. Ниже приведены шаги, которые я предпринял до сих пор.
После https://medium.com/@naomi.fridman / install-pyspark-to-run-jupyter-notebook-on- windows -4ec2009de21f
- Установлено JAVA 8 (версия для Windowsx64)
- Установите переменную JAVA_HOME и добавленную переменную PATH в соответствии с указанным выше сайтом (с путями более новой версии)
- Скачано Apache Spark 2.4.4 (30 августа 2019 г.) PreBuilt для Apache Имеет oop 2.7
- Разархивировал его на C: \ Spark (получил spark-2.4.4-bin-hadoop2.7. tar)
- Распакуйте его в C: \ Spark (получил папку spark-2.4.4-bin-hadoop2.7)
- Установите дополнительные переменные окружения и добавьте папку bin в PATH переменная в соответствии с указанным сайтом
- Скачал файл windows 64-bit winutils.exe для сайта, указанного выше, запустив команду cmd, которую мне сказали запустить. Я оставил его копию в папке C: \ Spark \ spark-2.4.4-bin-hadoop2.7 и в папке bin.
- Запустил и проверил Anaconda spark - успех
Далее нужно было заставить pyspark работать в Jupyter
- В приглашении Anaconda я установил findspark "conda install - c conda-forge findspark"
- После запуска
findspark.init()
findspark.find()
import pyspark
findspark.find()
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
conf = pyspark.SparkConf().setAppName('appName').setMaster('local')
sc = pyspark.SparkContext(conf=conf)
spark = SparkSession(sc)
Ура, pyspark работает под Jupyter, но мне нужен этот автозапуск как часть ядра, из которых у меня есть только опция python3 прямо сейчас.
Так что я гуглю вещи и выясняю, что мне нужно создать каталог в "C: \ ProgramData \ Anaconda3 \ share \ jupyter \ kernels", чтобы я скопировал и переименовал существующую папку python3 и просто изменил " display_name ": to" pyspark ", я должен быть в состоянии добавить туда строку вроде" --profile = myCustomProfile ", но это продолжало давать сбой (модуль не найден?), поэтому я отказался от профилей (помогите здесь тоже, плз?) Затем я создал файл 00-pyspark-setup.py в папке "C: \ Users \ Admin.ipython \ profile_default \ startup". Я прочитал, что это своего рода autoexe c .bat поэтому я поместил вышеуказанный код findspark и sparkContext
Вот где я застрял. Основная проблема в том, что я не могу получить доступ к s3 / s3a / s3n через команду spark.read.load ("s3: / xx"), я также не могу запустить такие вещи, как %% configure -f, но это меньшая проблема.
Я прочитал решения через boto3, но позволяет ли это spark.read.load напрямую из s3? Не похоже на это. Я могу ошибаться
Другой включает в себя загрузку aws - java -sdk-1.7.4.jar и oop - aws -2.7.1.jar от maven, добавляя эти строки где-то (или 2 разных места). Это должно дать мне желаемый результат.
spark.executor.extraClassPath C:\spark\maven\aws-java-sdk-1.7.4.jar;C:\spark\maven\hadoop-aws-2.7.1.jar
spark.driver.extraClassPath C:\spark\maven\aws-java-sdk-1.7.4.jar;C:\spark\maven\hadoop-aws-2.7.1.jar
hadoop_conf = spark.sparkContext._jsc.hadoopConfiguration()
hadoop_conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
hadoop_conf.set("fs.s3a.access.key", "aKey")
hadoop_conf.set("fs.s3a.secret.key", "sKey"
Кто-нибудь может мне помочь? Я думаю, что мне нужно создать свой собственный "C: \ spark \ spark-2.4.4-bin-hadoop2.7 \ conf \ spark-defaults.conf" и добавить туда коды spark.driver, но это не так работает, моя ошибка от Jupyter все еще, и большинство ответов в Интернете, кажется, что они ссылаются на linux пути, но здесь мне нужно указать диск, не так ли?
Py4JJavaError: Ошибка при вызове o84 .csv. : java .lang.RuntimeException: java .lang.ClassNotFoundException: Класс org. apache .had oop .fs.s3a.S3AFileSystem не найден От C: \ spark \ spark-2.4.4- bin-hadoop2.7 \ python \ lib \ py4j-0.10.7-sr c .zip \ py4j \ protocol.py в get_return_value (ответ, gateway_client, target_id, name)