1

我正在使用从JSON事件流转换而来的Dataframes来处理事件,这些事件最终会以Parquet格式写出来。Spark Dataframe验证实木复合地址写入的列名(scala)

但是,某些JSON事件在我想记录的键中包含空格,并在将其转换为Parquet之前从数据框中过滤掉这些事件,因为; {}()\ n \ t =被考虑如[1]中列出的Parquet架构(CatalystSchemaConverter)中的特殊字符,其位置在以下,因此不应在列名中允许。

如何在Dataframe中对列名进行验证并完全放弃这样的事件,而不会错过Spark Streaming作业。

[1] 星火的CatalystSchemaConverter

def checkFieldName(name: String): Unit = { 
    // ,;{}()\n\t= and space are special characters in Parquet schema 
    checkConversionRequirement(
     !name.matches(".*[ ,;{}()\n\t=].*"), 
     s"""Attribute name "$name" contains invalid character(s) among " ,;{}()\\n\\t=". 
     |Please use alias to rename it. 
     """.stripMargin.split("\n").mkString(" ").trim) 
    } 

回答

0

使用alias改变你的字段名没有这些特殊字符。

相关问题