Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如果csv列标题包含空格,则在spark中将csv转换为拼花会出错_Scala_Apache Spark_Apache Spark Sql_Parquet - Fatal编程技术网

Scala 如果csv列标题包含空格,则在spark中将csv转换为拼花会出错

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

我有一个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列名的空格。列名必须保持原样,即使它们包含最终用户给定的空格


有没有办法解决这个问题?

在保存之前,我会重命名数据框中有问题的列,将空格改为下划线。可以使用
选择“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?我想你的评论澄清了这一点。谢谢