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改變你的字段名沒有這些特殊字符。

相關問題