Получить путь к файлу HDFS в PySpark для файлов в формате файла последовательности

Мои данные о HDFS находятся в формате файла Sequence. Я использую PySpark (Spark 1.6) и пытаюсь достичь двух вещей:

  1. Путь к данным содержит метку времени в формате гггг / мм / дд / чч, которую я хотел бы добавить в сами данные. Я пробовал SparkContext.wholeTextFiles, но думаю, что он может не поддерживать формат файла Sequence.

  2. Как мне справиться с указанным выше вопросом, если я хочу обработать данные за день и добавить дату в данные? В этом случае я бы загружал данные в формате yyyy / mm / dd / *.

Цените любые указатели.


person Arnkrishn    schedule 19.10.2016    source источник


Ответы (1)


Если сохраненные типы совместимы с типами SQL и вы используете Spark 2.0, это довольно просто. Импорт input_file_name:

from pyspark.sql.functions import input_file_name 

Прочитать файл и преобразовать в DataFrame:

df = sc.sequenceFile("/tmp/foo/").toDF()

Добавить имя файла:

df.withColumn("input", input_file_name())

Если это решение неприменимо в вашем случае, универсальным является перечисление файлов напрямую (для HDFS вы можете использовать библиотеку hdfs3):

files = ...

прочтите одно за другим, добавляя имя файла:

def read(f):
    """Just to avoid problems with late binding"""
    return sc.sequenceFile(f).map(lambda x: (f, x))

rdds = [read(f) for f in files]

и союз:

sc.union(rdds)
person zero323    schedule 19.10.2016