saveAsTable用于空格失败的列

时间:2018-03-08 10:39:31

标签: pyspark apache-spark-sql spark-dataframe emr amazon-emr

我有一段pyspark代码将数据帧转换为物理表:

df.write.mode('overwrite).saveAsTable('sometablename')

如果数据框df包含名称中包含空格的列,则会失败,并显示以下错误:

18/03/08 10:33:29 ERROR CreateDataSourceTableAsSelectCommand: Failed to write to table pivot_up_spaces_Export_Data_4
org.apache.spark.sql.AnalysisException: Attribute name "SUM_count_col umn" contains invalid character(s) among " ,;{}()\n\t=". Please use alias to rename it.;
        at org.apache.spark.sql.execution.datasources.parquet.ParquetSchemaConverter$.checkConversionRequirement(ParquetSchemaConverter.scala:581)
        at org.apache.spark.sql.execution.datasources.parquet.ParquetSchemaConverter$.checkFieldName(ParquetSchemaConverter.scala:567)

当我在同一个表上使用registerTempTable时,一切正常:

df.registerTempTable('sometablename')

但是,我在spark-sql中,我能够创建在列名中有空格的表。我有什么方法可以解决pyspark中的这种情况吗?

我在EMR 5.10.0集群上运行它,内部使用Spark 2.2.0。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式替换坏符号。检查我的answer