我有一个类似以下的pyspark数据框:
其中一列的值
这很有道理。在将数据加载到Postgres之前,我该如何高效地从pyspark dataframe中删除null字符?
我已经尝试使用一些pyspark.sql.functions来清洗数据,但没有成功。encode、decode和regex_replace都没有起作用:
理想情况下,我希望在不指定确切列或违规字符的情况下清理整个数据框,因为我不一定预先知道这些信息。
我正在使用带有UTF8编码的Postgres 9.4.9数据库。
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 dataframe中删除null字符?
我已经尝试使用一些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'))
理想情况下,我希望在不指定确切列或违规字符的情况下清理整个数据框,因为我不一定预先知道这些信息。
我正在使用带有UTF8编码的Postgres 9.4.9数据库。
df.fillna()
,它看起来返回相同的数据框,因为没有一个单元格实际上是空的。如果我尝试将结果df加载到postgres表中,我仍然会收到相同的错误消息。 - Steve