我尝试使用Polybase T-SQL将 parquet 文件复制到Azure Synapse中的表。
data = [["Jean", 15, "Tennis"], ["Jane", 20, "Yoga"], ["Linda", 35, "Yoga"], ["Linda", 35, "Tennis"]]
columns = ["Name", "Age", "Sport"]
df = spark.createDataFrame(data, columns)
然后,我通过按列“Sport”进行分区,将 Dataframe 保存为 parquet 文件:
df\
.write\
.option("header", True)\
.partitionBy("Sport")\
.format("parquet")\
.mode("overwrite")\
.save("/mnt/test_partition_polybase.parquet")
然后,我使用Polybase T-SQL将parquet文件复制到Synapse中的表:
IF OBJECT_ID(N'EVENTSTORE.TEST') IS NOT NULL BEGIN DROP EXTERNAL TABLE EVENTSTORE.TEST END
CREATE EXTERNAL TABLE EVENTSTORE.TEST(
[Name] NVARCHAR(250),
[Age] BIGINT,
[SPORT] NVARCHAR(250)
)
WITH (DATA_SOURCE = [my_data_source],LOCATION = N'test_partition_polybase.parquet',FILE_FORMAT = [SynapseParquetFormat],REJECT_TYPE = VALUE,REJECT_VALUE = 0)
我得到的错误:
由于内部错误,外部文件访问失败:'文件测试_分区_聚合物基. parquet /运动=网球/部件-00000-tid-5109481329839379912- 631 db 0ad-cd 52 - 4f 9 e-acf 6 - 76828 a8 aa 4 eb-67- 1.c000.snappy. parquet :HdfsBridge::CreateRecordReader -创建记录读取器时遇到意外错误:Hadoop执行异常:列计数不匹配。源文件有2列,外部表定义有3列
这是因为分区文件中没有分区列“Sport”,如何解决?
1条答案
按热度按时间xtfmy6hx1#
最后,我通过创建一个重复列解决了这个问题:
我不知道这是否是最好的解决办法,但这是我找到的唯一一个。