Убедитесь, что на вашем сервере установлен Sendmail.
Если вы проверили свой код и проверили, что там нет ничего плохого, перейдите в / var / mail и проверьте, пуста ли эта папка.
Если он пуст, вам нужно будет сделать:
sudo apt-get install sendmail
, если вы находитесь на сервере Ubuntu.
Метод parquetFile метода SQLContext
и паркета DataFrameReader
принимает несколько путей. Поэтому любая из этих работ:
df = sqlContext.parquetFile('/dir1/dir1_2', '/dir2/dir2_1')
или
df = sqlContext.read.parquet('/dir1/dir1_2', '/dir2/dir2_1')
Немного поздно, но я нашел это во время поиска, и это может помочь кому-то еще ...
Вы также можете попробовать распаковать список аргументов на spark.read.parquet()
paths=['foo','bar']
df=spark.read.parquet(*paths)
Это удобно, если вы хотите передать несколько блоков в аргумент пути:
basePath='s3://bucket/'
paths=['s3://bucket/partition_value1=*/partition_value2=2017-04-*',
's3://bucket/partition_value1=*/partition_value2=2017-05-*'
]
df=spark.read.option("basePath",basePath).parquet(*paths)
Это классно, потому что вам не нужно перечислять все файлы в basePath, и вы все равно получаете вывода раздела.
Просто отвечая на вопрос Джона Конли и немного приукрашивая его и предоставляя полный код (используемый в Jupyter PySpark), поскольку я нашел его ответ чрезвычайно полезным.
from hdfs import InsecureClient
client = InsecureClient('http://localhost:50070')
import posixpath as psp
fpaths = [
psp.join("hdfs://localhost:9000" + dpath, fname)
for dpath, _, fnames in client.walk('/eta/myHdfsPath')
for fname in fnames
]
# At this point fpaths contains all hdfs files
parquetFile = sqlContext.read.parquet(*fpaths)
import pandas
pdf = parquetFile.toPandas()
# display the contents nicely formatted.
pdf