使用 pyspark 将 csv 读取到具有动态自定义模式的数据框

reading csv to dataframe with dynamic custom schema with pyspark

我正在笔记本中使用数据块。我想读取带有自定义模式的 csv 文件。 我希望能够遍历文件夹中的所有 csv 文件并使用它们各自的模式读取它们。

所以我有每个 csv 文件的架构:

csv_1 = StructType([
    StructField('foo', StringType(), False),
    StructField('bar', StringType(), True),
])

csv_2 = StructType([
    StructField('foo', StringType(), False),
    StructField('bar', StringType(), True),
    StructField('baz', StringType(), True),
])

csv_3 = StructType([
    StructField('bar', StringType(), True)
])

然后我有这个循环:

for file in os.listdir(path):
    filename = os.path.splitext(file)[0]
    dataframes[filename] = spark.read.csv(path+file, header=True, schema=???)

我想我可能需要在某处使用一些映射,但我不确定如何使用。

filename_to_related_mapping = {
  'name1': csv_1,
  'name2': csv_2,
 ...
}.get(filename)
for file in os.listdir(path):
    filename = os.path.splitext(file)[0]
    dataframes[filename] = spark.read.csv(path+file, header=True, schema=filename_to_related_mapping[filename])

无论如何,它只是一个 CSV,另一种方法是不传递模式,它将被动态推断。