使用 Spark 从 csv 数据中删除特殊字符

Exp*_*rer 4 csv apache-spark pyspark

我想使用 PySpark 从 csv 数据中删除特定的(例如@、&)特殊字符。我经历了 optimuspyspark( https://github.com/ironmussa/Optimus )。但是,它正在删除所有特殊字符。我想使用 Spark 从 CSV 数据中删除特定的特殊字符。是否有任何内置函数或自定义函数或第三方库来实现此功能。提前致谢。

我试过的几个链接:

https://community.hortonworks.com/questions/49802/escaping-double-quotes-in-spark-dataframe.html

Gra*_*non 5

希望这是您正在寻找的:

假设您有一个简单的 csv 文件(2 行),如下所示:

@A 234, 'B' 225, 'C' !556
@D 235, 'E' 2256, 'F'! 557
Run Code Online (Sandbox Code Playgroud)

将 csv 读入数据帧:

df=spark.read.csv('test1.csv',mode="DROPMALFORMED",\
                  inferSchema=True,\
                  header = False)

df.show()

+------+---------+---------+
|   _c0|      _c1|      _c2|
+------+---------+---------+
|@A 234|  'B' 225| 'C' !556|
|@D 235| 'E' 2256| 'F'! 557|
+------+---------+---------+
Run Code Online (Sandbox Code Playgroud)

使用 pyspark 函数删除特定的不需要的字符

from pyspark.sql.functions import *
newDf = df.withColumn('_c0', regexp_replace('_c0', '@', ''))\
          .withColumn('_c1', regexp_replace('_c1', "'", ''))\
          .withColumn('_c2', regexp_replace('_c2', '!', ''))

newDf.show()

+-----+-------+--------+
|  _c0|    _c1|     _c2|
+-----+-------+--------+
|A 234|  B 225| 'C' 556|
|D 235| E 2256| 'F' 557|
+-----+-------+--------+
Run Code Online (Sandbox Code Playgroud)

如果要从所有列中删除特定字符,请尝试以下操作

从与上面相同的简化文本文件/数据帧开始:

+------+---------+---------+
|   _c0|      _c1|      _c2|
+------+---------+---------+
|@A 234|  'B' 225| 'C' !556|
|@D 235| 'E' 2256| 'F'! 557|
+------+---------+---------+
Run Code Online (Sandbox Code Playgroud)

从数据框中的列中删除字符的函数:

def cleanColumn(tmpdf,colName,findChar,replaceChar):
    tmpdf = tmpdf.withColumn(colName, regexp_replace(colName, findChar, replaceChar))
    return tmpdf
Run Code Online (Sandbox Code Playgroud)

从df 中的所有列中删除“'”字符(替换为空,即“”)

allColNames = df.schema.names
charToRemove= "'"
replaceWith =""
for colName in allColNames:
    df=cleanColumn(df,colName,charToRemove,replaceWith)
Run Code Online (Sandbox Code Playgroud)

结果输出是:

df.show()
+------+-------+-------+
|   _c0|    _c1|    _c2|
+------+-------+-------+
|@A 234|  B 225| C !556|
|@D 235| E 2256| F! 557|
+------+-------+-------+
Run Code Online (Sandbox Code Playgroud)