我的HDFS数据是序列文件格式。我正在使用PySpark(Spark 1.6)并尝试实现两件事:
数据路径包含yyyy / mm / dd / hh格式的时间戳,我想将其带入数据本身。我尝试过SparkContext.wholeTextFiles,但我认为这可能不支持Sequence文件格式。
如果我想在一天内处理数据并希望将日期纳入数据,我该如何处理上述问题?在这种情况下,我将加载yyyy / mm / dd / *格式的数据。
欣赏任何指示。
答案 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)