【问题标题】:Reading Multiple Files in Spark and Processing it before Appending在 Spark 中读取多个文件并在附加之前对其进行处理
【发布时间】:2016-05-25 20:41:46
【问题描述】:

我的问题是我有多个相同结构的 txt 文件,我想将它们导入到 spark 中。然后创建一个标识符列,汇总数据,最后将它们堆叠起来。

例如其中一个文件如下所示:

   Date     A   B   C
2/21/2014   A1  11  2
2/22/2014   A1  11  5
2/23/2014   A1  21  3
2/24/2014   A1  13  5
2/25/2014   A1  23  4
2/26/2014   A1  28  4
2/27/2014   A1  32  2
2/28/2014   B1  45  4
3/1/2014    B1  39  4
3/2/2014    B1  29  4
3/3/2014    B1  49  5
3/4/2014    B1  18  4
3/5/2014    B1  30  3
3/6/2014    B1  50  5

读完这个文件后,我想添加一个提到文件名的列,更新后的数据如下所示:

    Date    A   B   C   File
2/21/2014   A1  22  2   File1
2/22/2014   A1  36  2   File1
2/23/2014   A1  17  4   File1
2/24/2014   A1  30  2   File1
2/25/2014   A1  11  2   File1
2/26/2014   A1  32  2   File1
2/27/2014   A1  19  5   File1
2/28/2014   B1  22  3   File1
3/1/2014    B1  12  5   File1
3/2/2014    B1  50  3   File1
3/3/2014    B1  42  4   File1
3/4/2014    B1  37  4   File1
3/5/2014    B1  31  5   File1
3/6/2014    B1  20  3   File1

然后总结数据:

 File   A   B   C
File1   A1  167 19
File1   B1  214 27

同样,另一个数据集将被创建和汇总。最后叠在一起。如果有 2 个文件,数据集如下所示:

File    A   B   C
File1   A1  167 19
File1   B1  214 27
File2   Z10 167 19
File2   X20 214 27

我可以单独导入数据,通过将其转换为数据帧来处理它们,然后最终将它们堆叠起来。但我无法以自动化的方式做到这一点。谁能帮帮我。

非常感谢!

【问题讨论】:

  • 你有没有尝试过任何逻辑?
  • @WoodChopper:感谢您的评论。对于自动化,没有。但是我读取了数据,转换为 sql 数据框,添加了带有文件名的新列。如果你愿意,我可以将我目前使用的代码放在问题本身中。

标签: apache-spark pyspark spark-dataframe


【解决方案1】:

如果您的单个文件适合内存,您可以使用wholeTextFiles

rdd = sc.wholeTextFiles("/directorypath/*")

def appender(x):
    i = x[0]
    j = x[1].split("\n")
    k = [x.split() for x in j]
    l = [x.append(i) for x in k]
    return k

frdd = rdd.flatMap(appender)

df = frdd.toDF("Date","A","B","C","FileName")

wholeTextFiles 从那里返回(文件名,文件内容)的元组,您可以附加文件名。

df.groupBy("FileName","A").count() ##sum()

【讨论】:

  • 非常感谢您的回答。这真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多