如何使用pyspark清理凌乱的数据文件?

时间:2020-05-29 22:40:43

标签: python pyspark rdd

我有一个大的非结构化数据文件,在将所有内容放入Spark数据帧之前,需要进行一些清理。例如,我有一个如下数据文件:

garbage line
garbage line
headers below
name
age
gender
headers above
garbage line
data below
ben,23,male
april,18,female
chris,26,male
data above

此文件包含文件元数据和实际数据行。如果要使用Python,我将获得headers belowheaders abovedata belowdata above的行索引,然后对行列表进行切片以获取标头和数据行为了建立大熊猫。在Pyspark中执行此操作的好方法是什么?到目前为止,我得到的是下面的代码,想知道是否有更简单的方法。

from pyspark import SparkContext
from pyspark.sql import SparkSession

sc = SparkContext()
spark = SparkSession(sc)

rdd = sc.textFile('some_unstrutured_data.txt')

indicators = ['headers below', 'headers above', 'data below', 'data above']
row_pointers = rdd.zipWithIndex().filter(lambda r: r[0] in indicators).map(lambda r: r[1]).collect()
header_start, header_end, data_start, data_end = row_pointers[0], row_pointers[1], row_pointers[2], row_pointers[3]

headers = rdd.zipWithIndex().filter(lambda r: header_start < r[1] < header_end).map(lambda r: r[0]).collect()
data = rdd.zipWithIndex().filter(lambda r: data_start < r[1] < data_end).map(lambda r: tuple(r[0].split('|')))

df = data.toDF(headers)

0 个答案:

没有答案