我想使用PySpark从csv数据中删除特定的(例如@,&)特殊字符。我经历过optimuspyspark(https://github.com/ironmussa/Optimus)。但是它删除了所有特殊字符。我想使用Spark从CSV数据中删除特定的特殊字符。是否有任何内置函数或自定义函数或第三方库可实现此功能。提前谢谢。
我尝试了几个链接:
https://community.hortonworks.com/questions/49802/escaping-double-quotes-in-spark-dataframe.html
答案 0 :(得分:2)
希望这就是你要找的东西:
假设您有一个简单的csv文件(2行),如下所示:
@A 234, 'B' 225, 'C' !556
@D 235, 'E' 2256, 'F'! 557
将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|
+------+---------+---------+
使用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|
+-----+-------+--------+
如果要从所有列中删除特定字符,请尝试以下:
从与上面相同的简化textfile / dataFrame开始:
+------+---------+---------+
| _c0| _c1| _c2|
+------+---------+---------+
|@A 234| 'B' 225| 'C' !556|
|@D 235| 'E' 2256| 'F'! 557|
+------+---------+---------+
用于从数据框中的列中删除字符的功能:
def cleanColumn(tmpdf,colName,findChar,replaceChar):
tmpdf = tmpdf.withColumn(colName, regexp_replace(colName, findChar, replaceChar))
return tmpdf
从df中的 ALL 列中删除“\ n”字符(替换为无“ie”)
allColNames = df.schema.names
charToRemove= "'"
replaceWith =""
for colName in allColNames:
df=cleanColumn(df,colName,charToRemove,replaceWith)
结果输出为:
df.show()
+------+-------+-------+
| _c0| _c1| _c2|
+------+-------+-------+
|@A 234| B 225| C !556|
|@D 235| E 2256| F! 557|
+------+-------+-------+
答案 1 :(得分:0)
借助擎天柱,您可以:
df.cols.replace("*",["a","b","c"]," ").table()