我有一个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(csvfile)
csvdf.write.parquet(csvfile + "parquet")
现在,如果我的列标题中没有空格,则上面的代码可以正常工作。但是,如果任何csv文件的列标题中都有空格,则它将不起作用,并且会错误地指出无效的列标题。我的csv文件用,
分隔。
此外,我无法更改csv的列名称的空格。即使列名包含最终用户指定的空格,列名也必须保持原样。
关于如何解决此问题的任何想法?
答案 0 :(得分:2)
在保存之前,我将重命名数据框中的有问题的列,以将空间更改为下划线。可以与select "foo bar" as "foo_bar"
或.withColumnRenamed("foo bar", "foo_bar")
答案 1 :(得分:2)
每个@CodeHunter的请求
遗憾的是,拼花文件格式不允许在列名中留空格;
尝试时会吐出的错误是:contains invalid character(s) among " ,;{}()\n\t="
。
ORC也不允许在列名中使用空格:(
大多数sql引擎不支持带空格的列名,因此最好将列转换为foo_bar
或fooBar
的首选项或类似的内容