如果 csv 列 headers 包含空格,则在 spark 中将 csv 转换为镶木地板会出错

Converting csv to parquet in spark gives error if csv column headers contain spaces

我有 csv 文件,我正在使用 scala 中的 databricks 库将其转换为 parquet 文件。我正在使用以下代码:

val spark = SparkSession.builder().master("local[*]").config("spark.sql.warehouse.dir", "local").getOrCreate()
var csvdf = spark.read.format("org.apache.spark.csv").option("header", true).csv(csvfile)
csvdf.write.parquet(csvfile + "parquet")

现在,如果我的专栏 headers 中没有 space,上面的代码可以正常工作。但是,如果任何 csv 文件在列 headers 中有 spaces,它就不起作用,并且会错误地指出列 headers 无效。我的 csv 文件由 , 分隔。

此外,我无法更改 csv 的 space 列名称。列名必须保持原样,即使它们包含最终用户给出的 spaces。

知道如何解决这个问题吗?

我会在保存之前重命名数据框中的违规列,将 space 更改为下划线。可以与 select "foo bar" as "foo_bar".withColumnRenamed("foo bar", "foo_bar")

根据@CodeHunter 的要求

遗憾的是,parquet 文件格式不允许在列名称中使用空格;
当你尝试时它会吐出的错误是:contains invalid character(s) among " ,;{}()\n\t="

ORC 也不允许列名中有空格:(

大多数 sql 引擎不支持带空格的列名,因此您最好将列转换为您喜欢的 foo_barfooBar 或其他名称沿着这些路线