刪除UTF空字符我有類似如下的pyspark數據幀:Pyspark:從pyspark數據框中
df = sql_context.createDataFrame([
Row(a=3, b=[4,5,6],c=[10,11,12], d='bar', e='utf friendly'),
Row(a=2, b=[1,2,3],c=[7,8,9], d='foo', e=u'ab\u0000the')
])
凡e
列中的值中的一個包含UTF空字符\u0000
。如果我嘗試這個df
加載到PostgreSQL數據庫中,我得到以下錯誤:
ERROR: invalid byte sequence for encoding "UTF8": 0x00
這是有道理的。在將數據加載到postgres之前,如何有效地從pyspark數據框中刪除空字符?
我嘗試過使用一些pyspark.sql.functions
先清除數據,但沒有成功。 encode
,decode
和regex_replace
沒有工作:
df.select(regexp_replace(col('e'), u'\u0000', ''))
df.select(encode(col('e'), 'UTF-8'))
df.select(decode(col('e'), 'UTF-8'))
理想情況下,我想清潔整個數據幀沒有確切指明哪些列或違規性質是什麼,因爲我沒有必要提前知道這個信息時間。
我正在使用postgres 9.4.9數據庫與UTF8
編碼。
我不認爲這在這裏工作,因爲問題單元格實際上不是空 - 它包含UTF空字符\ u0000。如果我在我的示例df上運行'df.fillna()',它看起來像返回相同的數據幀,因爲沒有任何單元實際爲空。如果我嘗試將生成的df加載到postgres表中,我仍然會得到相同的錯誤消息。 – Steve