我们在 S3 中有一个对象,它有接近 100K 的文件。我们遍历每个文件并生成它的模式。下面的 PySpark 代码适用于具有 5K 文件的对象,但对于具有更多文件的对象会抛出 StackOverflow 错误。
对于超过 500 个文件的对象,它会在 unionAll 行中抛出 StackOverFlow 错误。
如有任何建议,我们将不胜感激!
PySpark 代码:
schema_empty = structType([structField("col_name",StringType(),True), structField("data_type",StringType(),True)structField("file_name",StringType(),True)])
schema_df = spark.createDataFrame([],schema_empty)
schema_file = structType([structField("col_name",StringType(),True), structField("file_name",StringType(),True)])
for page in pages:
for obj in page['Contents']:
s3_file = "s3://" + bucket + obj["Key"]
df = spark.read.option("header","True").option("inferSchema","True").parquet(s3_file)
col_list = df.dtypes
df = spark.createDataFrame(col_list, schema_file)
df_name = df.withColumn("filename",lit(s3_file))
schema_df = schema_df.unionAll(df_name)