# File paths list
fileinfo=dbutils.fs.ls("dbfs:/mnt/blob1/myfiles/")
paths=[i[0] for i in fileinfo]
print(paths)
# Finding the required file path
col_num=[]
for file_path in paths:
df=spark.read.parquet(file_path)
col_num.append(len(df.columns))
i=col_num.index(max(col_num))
our_path=paths[i]
print(our_path)
# Schema
myschema=spark.read.parquet(our_path).schema
print(myschema)
# Enforcing the schema to all files
result_df = spark.read.format("parquet").schema(myschema).load("dbfs:/mnt/blob1/myfiles/")
display(result_df)
1条答案
按热度按时间krugob8w1#
在读取大量文件或读取一定量的数据后,是否有任何方法可以推断出模式。
AFAIK,可能没有任何此类方法
你可以尝试下面的方法,我能够得到想要的结果.
首先从文件列表中获取列数较多的parquet文件路径。现在,获取该特定文件的模式,并将该模式应用于所有文件。
请完成以下示例演示:
这些是我在Blob存储中的 parquet 文件,其中**
xyz.parquet
**比其他文件多了一列。安装后,获取文件路径列表,并找到具有更多列数的 parquet 。
现在,获取这个parquet文件的模式
对多个parquet文件强制使用这个自定义模式,这样我们就可以得到具有所需模式的 Dataframe 。
您可以看到,我们得到了额外的列,对于没有该列的文件,该值将为空。
我的源代码: