允许空格和特殊字符与三角洲表嵌套列名称

升级到砖运行时的10.2或更高版本和使用列映射模式允许空格和特殊字符的列名称。

写的shanmugavel.chandrakasu

去年发表在:2022年10月26日

问题

是常见的JSON文件包含嵌套的结构体列。嵌套列名在JSON文件中可以有空间之间的名字。

当你使用Apache火花读或写JSON文件嵌套列名称中使用空格,你得到一个AnalysisException错误消息。

例如,如果您试图读取JSON文件,评估DataFrame,然后写出来一个增量表DBR 10.2或低于它返回一个错误。

% scala val df = spark.read.json (“< path-to-JSON-file >”) df.write.format .mode(“δ”)(“覆盖”).save (“< path-to-delta-table >”)

预期的错误消息是可见的堆栈跟踪。

stage_info.Accumulables AnalysisException:属性名称”。数失败值中包含无效的字符(s),, {} () \ n \ t =”。请使用别名来重命名它。

导致

嵌套列名称之一DataFrame包含空格,这是防止你写输出差值表。

解决方案

如果你的源文件是简单的,你可以使用withColumnRenamed重命名多个列和删除空间。但是,这很快就会复杂嵌套模式。

withColumn可用于压平嵌套列和重命名现有列(空格)一个新列名称(没有空格)。在大型模式的情况下,压扁的所有嵌套列DataFrame可以是一个冗长乏味的任务。

如果你的集群使用砖运行时的10.2或以上可以完全避免这个问题通过允许列映射模式。列映射模式以及允许使用空间,;{}()\ n \ t =表中的列名。

设置三角洲表的属性delta.columnMapping.mode的名字启用列映射模式。

此示例代码设置了一个三角洲能够支持嵌套表列的名称空间,但是它需要一个集群运行砖运行时的10.2或以上。

% scala进口io.delta.tables.DeltaTable val df = spark.read.json (“< path-to-JSON-file >”) DeltaTable.create () .addColumns df.schema .property(“三角洲。minReaderVersion”、“2”) .property(“三角洲。minWriterVersion”、“5”) .property (“delta.columnMapping。模式”、“名称”).location (“< path-to-delta-table >”) . execute () df.write.format(“δ”).mode .save(“追加”)(“< path-to-delta-table >”)
这篇文章有用吗?