Я использую PyCharm 2018.1, используя Python 3.4 с Spark 2.3, установленным через pip в virtualenv. На локальном хосте нет установки hadoop, поэтому нет установки Spark (таким образом, нет SPARK_HOME, HADOOP_HOME и т. Д.)
Когда я пытаюсь это сделать:
from pyspark import SparkConf
from pyspark import SparkContext
conf = SparkConf()\
.setMaster("local")\
.setAppName("pyspark-unittests")\
.set("spark.sql.parquet.compression.codec", "snappy")
sc = SparkContext(conf = conf)
inputFile = sparkContext.textFile("s3://somebucket/file.csv")
Я получаю:
py4j.protocol.Py4JJavaError: An error occurred while calling o23.partitions.
: java.io.IOException: No FileSystem for scheme: s3
Как я могу читать с s3 при запуске pyspark в локальном режиме без полной установки Hadoop локально?
FWIW - это прекрасно работает, когда я выполняю его на узле EMR в нелокальном режиме.
Следующее не работает (та же ошибка, хотя она разрешает и загружает зависимости):
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages "org.apache.hadoop:hadoop-aws:3.1.0" pyspark-shell'
from pyspark import SparkConf
from pyspark import SparkContext
conf = SparkConf()\
.setMaster("local")\
.setAppName("pyspark-unittests")\
.set("spark.sql.parquet.compression.codec", "snappy")
sc = SparkContext(conf = conf)
inputFile = sparkContext.textFile("s3://somebucket/file.csv")
Те же (плохие) результаты с:
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--jars "/path/to/hadoop-aws-3.1.0.jar" pyspark-shell'
from pyspark import SparkConf
from pyspark import SparkContext
conf = SparkConf()\
.setMaster("local")\
.setAppName("pyspark-unittests")\
.set("spark.sql.parquet.compression.codec", "snappy")
sc = SparkContext(conf = conf)
inputFile = sparkContext.textFile("s3://somebucket/file.csv")