首先,我可以说我在写这篇文章的时候正在学习DataBricks,所以我喜欢更简单、更粗糙的解决方案以及更复杂的解决方案。
我正在阅读一个CSV文件,如下所示:
df1 = spark.read.format("csv").option("header", True).load(path_to_csv_file)
然后将其保存为Delta Live Table,如下所示:
df1.write.format("delta").save("table_path")
CSV头中包含空格、&
和/
等字符,我收到错误消息:
分析异常:在“,”中发现无效字符;{}()\n\t=”。请通过将表属性“delta.columnMapping.mode”设置为“name”来启用列Map。有关详细信息,请参阅https://docs.databricks.com/delta/delta-column-mapping.html,或者可以使用alias对其进行重命名。
documentation I've seen on the issue解释了如何在使用ALTER TABLE
创建表之后将列Map模式设置为'name',但没有解释如何在创建时设置它,特别是在使用上面的DataFrame API时。有办法做到这一点吗?
有没有更好的方法将CSV放入新表?
更新:
阅读了这里的文档和here,并受到Robert答案的启发,我首先尝试了以下方法:
spark.conf.set("spark.databricks.delta.defaults.columnMapping.mode", "name")
还是没有运气,我得到了同样的错误。有趣的是,对于一个初学者来说,编写一个头中有空格的CSV文件到DeltaLiveTable是多么的困难
3条答案
按热度按时间rqenqsqc1#
感谢Databricks社区论坛上的Hemant,我找到了答案。
现在我可以用SQL查询它,也可以将它加载到Spark Dataframe 中:
x一个一个一个一个x一个一个二个x
SQL方式
这个方法做同样的事情,但是在SQL中。
首先,为CSV文件创建CSV支持的表:
然后使用CSV支持的表创建增量表:
我已经验证了,如果省略TBLPROPERTIES语句,我会得到与使用Python时相同的错误。
我猜Python的答案是使用
spark.sql
并使用Python运行它,这样我就可以在SQL中嵌入CSV路径变量。tpgth1q72#
你可以在你正在使用的集群的Spark配置中设置这个选项,这就是你在运行时启用该模式的方法。
您还可以在运行时设置配置,如下所示:
yr9zkbsy3#
以下几点对我很有效
在您的原始帖子中,缺少“. properties.”