关于spark以parquet写入时的小问题

今天使用spark对一个dataframe中的数据以某一个为主键做groupby进行求和,数据类似如下:

scala> userDF.show
+---------+--------+
| userid | count |
+--------+---------+
| 11111111|  102|
| 2222222|    97|
| 3333333|    10|
| 11111111|    24|
+----------+-------+

scala> val dataFrame = userDF.groupBy("userid").sum("count")
dataFrame: org.apache.spark.sql.DataFrame = [uid: string, sum(count): bigint]

scala>dataFrame.repartition(5).write.mode(SaveMode.Overwrite).parquet("hdfs://xxx.xxx.xxx.xxx:8020/userdata/userdata_20181017")

结果出错了,报了下面的错(org.apache.spark.sql.AnalysisException: Attribute name "xxxxx" contains invalid character(s) among ",;{}()\n\t=".):

关于spark以parquet写入时的小问题

想来想去,dataframe的数据没问题,根据报错分析下,提示有特殊字符,那在dataframe的表头仅有“sum(count)”,这里面包含有括号,于是想着对dataframe表头进行重命名,代码如下:

scala> val dataFrame = userDF.groupBy("userid").sum("count").toDF("userid", "count")
dataFrame: org.apache.spark.sql.DataFrame = [uid: string, sum(count): bigint]

scala>dataFrame.repartition(5).write.mode(SaveMode.Overwrite).parquet("hdfs://xxx.xxx.xxx.xxx:8020/userdata/userdata_20181017")

结果数据能正确写到hdfs上了。