Как эффективно читать несколько файлов CSV с пропуском строк и нижнего колонтитула в PySpark?Python

Программы на Python
Anonymous
Как эффективно читать несколько файлов CSV с пропуском строк и нижнего колонтитула в PySpark?

Сообщение Anonymous »

У меня есть несколько файлов CSV с непостоянным количеством строк данных без строки заголовка, и я хочу считать эти файлы в один кадр данных PySpark. Структура файлов CSV следующая:

Код: Выделить всё

data1,data2
data1,data2,data3
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6       =>        data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2,data3,data4,data5,data6                 data1,data2,data3,data4,data5,data6
data1,data2
data1,data2
data1,data2,data3
Я хочу пропустить первые две и последние три строки из каждого файла, прежде чем объединять их в один DataFrame. Я использую следующий подход, который работает, но я ищу более оптимизированное решение, поскольку наборы данных довольно велики.

Код: Выделить всё

def concat(df_list: list):
df = df_list[0]
for i in df_list[1:]:
df = df.unionByName(i, allowMissingColumns=True)
return df

def __read_with_separators(self, spark: SparkSession, field_details: List[Dict[str, Any]], file_path_list: List[str], kwargs: dict) -> DataFrame:
df_list = []
for file_path in file_path_list:
rdd = spark.sparkContext.textFile(file_path)

total_rows = rdd.count()
start_index = kwargs.get("skiprows", 0)
end_index = total_rows - kwargs.get("skipfooter", 0)

rdd_filtered = rdd.zipWithIndex().filter(lambda x: start_index 

Подробнее здесь: [url]https://stackoverflow.com/questions/79003021/how-to-read-multiple-csv-files-with-skipping-rows-and-footer-in-pyspark-efficien[/url]

Вернуться в «Python»