Scala 如果csv列标题包含空格,则在spark中将csv转换为拼花会出错
我有一个csv文件,我正在使用scala中的databricks库将其转换为拼花地板文件。我正在使用以下代码:Scala 如果csv列标题包含空格,则在spark中将csv转换为拼花会出错,scala,apache-spark,apache-spark-sql,parquet,Scala,Apache Spark,Apache Spark Sql,Parquet,我有一个csv文件,我正在使用scala中的databricks库将其转换为拼花地板文件。我正在使用以下代码: 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(cs
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")
现在,如果我的列标题中没有空间,那么上面的代码可以正常工作。但是,如果任何csv文件的列标题中有空格,则该文件将不起作用,并且会出现错误,说明列标题无效。我的csv文件由,
分隔
此外,我无法更改csv列名的空格。列名必须保持原样,即使它们包含最终用户给定的空格
有没有办法解决这个问题?在保存之前,我会重命名数据框中有问题的列,将空格改为下划线。可以使用
选择“foo bar”作为“foo\u bar”
或。根据@CodeHunter的请求,使用重命名的列(“foo bar”、“foo\u bar”)
遗憾的是,拼花文件格式不允许在列名中使用空格
当您尝试时,它将抛出的错误是:
在“,;{}()\n\t=“
中包含无效字符
ORC也不允许在列名中使用空格:(
大多数sql引擎都不支持带有空格的列名,因此您最好将列转换为您喜欢的
foo_bar
或fooBar
或类似的内容,对吗?在写入parquet之前,您是指什么?我想这是一个解决方案,但我在想是否有什么东西可以直接注意这个场景。是的,我的意思是在写入拼花地板之前。在csv读取中也可能有一些引用/转义选项,但我a)对它们不太自信,b)倾向于在我自己的代码中选择没有空格的名称,所以我投射!拼花文件格式不允许在列名中使用空格<代码>在“,;{}()\n\t=”中包含无效字符代码>ORC也不允许在列中使用空格names@JamesTobin您能否将此作为解决方案提供给OP?我想你的评论澄清了这一点。谢谢