在PySpark中获取序列文件格式的文件的HDFS文件路径

时间:2016-10-19 16:29:50

标签: apache-spark pyspark sequencefile

我的HDFS数据是序列文件格式。我正在使用PySpark(Spark 1.6)并尝试实现两件事:

  1. 数据路径包含yyyy / mm / dd / hh格式的时间戳,我想将其带入数据本身。我尝试过SparkContext.wholeTextFiles,但我认为这可能不支持Sequence文件格式。

  2. 如果我想在一天内处理数据并希望将日期纳入数据,我该如何处理上述问题?在这种情况下,我将加载yyyy / mm / dd / *格式的数据。

  3. 欣赏任何指示。

1 个答案:

答案 0 :(得分:4)

如果存储的类型与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]

和union:

sc.union(rdds)