Чтение нескольких паркетных файлов из S3 Bucket [duplicate]

Убедитесь, что на вашем сервере установлен Sendmail.

Если вы проверили свой код и проверили, что там нет ничего плохого, перейдите в / var / mail и проверьте, пуста ли эта папка.

Если он пуст, вам нужно будет сделать:

sudo apt-get install sendmail

, если вы находитесь на сервере Ubuntu.

5
задан joshsuihn 16 May 2016 в 15:09
поделиться

3 ответа

Метод parquetFile метода SQLContext и паркета DataFrameReader принимает несколько путей. Поэтому любая из этих работ:

df = sqlContext.parquetFile('/dir1/dir1_2', '/dir2/dir2_1')

или

df = sqlContext.read.parquet('/dir1/dir1_2', '/dir2/dir2_1')
5
ответ дан John Conley 21 August 2018 в 09:26
поделиться

Немного поздно, но я нашел это во время поиска, и это может помочь кому-то еще ...

Вы также можете попробовать распаковать список аргументов на 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, и вы все равно получаете вывода раздела.

11
ответ дан N00b 21 August 2018 в 09:26
поделиться
  • 1
    Когда я просто использую этот код, он ищет каталоги в каталоге / home /. Можете ли вы разместить весь синтаксис? – Viv 19 June 2017 в 17:38
  • 2
    @ N00b, когда я пробовал этот код, он дает мне ошибку, что загрузка принимает только 4 аргумента, но у меня есть мои пути к 24 файлам .. есть ли возможность переопределить это. Я стараюсь не делать несколько нагрузок и объединение, поэтому я хотел бы использовать нагрузку, чтобы поместить несколько файлов в df – E B 19 January 2018 в 16:42

Просто отвечая на вопрос Джона Конли и немного приукрашивая его и предоставляя полный код (используемый в 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
2
ответ дан VenVig 21 August 2018 в 09:26
поделиться