abh*_*adh 6 java csv character-encoding apache-spark apache-spark-sql
我正在尝试从数据框中的列中删除特殊字符 ( å )。
我的数据看起来像:
ClientID,PatientID
AR0001å,DH_HL704221157198295_91
AR00022,DH_HL704221157198295_92
Run Code Online (Sandbox Code Playgroud)
我的原始数据大小约为 8TB,我需要从中删除这个特殊字符。
加载数据的代码:
reader.option("header", true)
.option("sep", ",")
.option("inferSchema", false)
.option("charset", "ISO-8859-1")
.schema(schema)
.csv(path)
Run Code Online (Sandbox Code Playgroud)
当我加载到数据框后,df.show()
它显示:
+--------+--------------------+
|ClientID| PatientID|
+--------+--------------------+
|AR0001Ã¥|DH_HL704221157198...|
|AR00022 |DH_HL704221157198...|
+--------+--------------------+
Run Code Online (Sandbox Code Playgroud)
我用来尝试替换这个字符的代码:
df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "\å", ""));
Run Code Online (Sandbox Code Playgroud)
但这没有用。在数据框中加载数据时,如果我将字符集更改为“UTF-8”,它就可以工作。
我无法使用当前字符集 (ISO-8859-1) 找到解决方案。
有些事情需要注意,
\n\n\\
colName
命令中应该是ClientId
或PatientID
如果您做了所有这些事情,那么我建议不要匹配“\xc3\xa5”,而是尝试匹配您想要保留的字符。例如,对于ClientID
列,
df.withColumn("ClientID", functions.regexp_replace(df.col("ClientID"), "[^A-Z0-9_]", ""));\n
Run Code Online (Sandbox Code Playgroud)\n\n另一种方法是将 UTF-8 字符“\xc3\xa5”转换为它的 ISO-8859-1 等效字符,并替换为结果字符串。
\n\nString escapeChar = new String("\xc3\xa5".getBytes("UTF-8"), "ISO-8859-1");\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
19220 次 |
最近记录: |