Apache spark 如何使用pyspark删除rdd中不可打印的字符
需要从rdd中删除不可打印的字符 样本数据如下Apache spark 如何使用pyspark删除rdd中不可打印的字符,apache-spark,pyspark,rdd,Apache Spark,Pyspark,Rdd,需要从rdd中删除不可打印的字符 样本数据如下 "@TSX•","None" "@MJU•","None" 预期产量 @TSX,None @MJU,None 尝试了下面的代码,但它不工作 sqlContext.read.option("sep", ","). \ option("encoding", "ISO-8859-1"). \ option("mode", "PERMISSIVE").csv(<path>).r
"@TSX•","None"
"@MJU•","None"
预期产量
@TSX,None
@MJU,None
尝试了下面的代码,但它不工作
sqlContext.read.option("sep", ","). \
option("encoding", "ISO-8859-1"). \
option("mode", "PERMISSIVE").csv(<path>).rdd.map(lambda s: s.replace("\xe2",""))
sqlContext.read.option(“sep”,“,”)\
选项(“编码”,“ISO-8859-1”)\
选项(“mode”,“PERMISSIVE”).csv().rdd.map(lambda s:s.replace(“\xe2”,”))
您可以使用sparkContext
的textFile
功能,并使用string.printable
删除字符串中的所有特殊字符
解释
对于您的输入行“@TSX•”,“无”
对于x中的y.split(',')
将字符串行拆分为[“@TSX•”,“None”]
,其中y
表示迭代时数组中的每个元素如果e在字符串中,则y中e的
。可打印正在检查y
中的每个字符是否可打印
如果是可打印的,则这些字符将合并成一个可打印字符字符串
.strip(“\”)
从可打印字符串中删除前面和结尾的倒逗号
最后,字符串列表被转换为逗号分隔的字符串,转换方式为:,'.join(['''.join(e表示y中的e,如果e表示string.printable)。strip('\')表示x.split(',')])
我希望解释清楚,以便理解一种选择是尝试使用字符串过滤文本。可打印的
:
导入字符串
sqlContext.read\
.期权(“sep”、“、”)\
.选项(“编码”,“ISO-8859-1”)\
.选项(“模式”、“允许”)\
.csv()\
博士\
.map(lambda s:filter(字符串中的lambda x:x.printable,s))
示例
导入字符串
rdd=sc.parallelize([“TSX•,无”,“MJU•,无”,“!@#ABC,*()XYZ”])
打印(rdd.map(lambda s:filter(string.printable中的lambda x:x,s)).collect())
#['TSX,无','MJU,无','!@ABC,*()XYZ']
参考资料
代码正在运行,但这里我只需要删除不可打印的字符,我需要此数据中的特殊字符。有办法吗?错误:.map(lambda x:',')。join([filter(lambda e:e in string.printable,y)for y in x.split(','))))\TypeError:sequence item 0:expected str instance,filter found不工作低于输出:,工作非常好:)请详细说明您的代码。我很容易理解我所解释的每一个部分@LUZOI不想删除特殊字符。有办法吗?@LUZO此解决方案不会删除特殊字符<代码>字符串。可打印的
包括所有可以打印的字符。filter
语句仅删除字符串中未找到的字符。可打印的
。请尝试一下,让我知道它是否有效。@LUZO我已经更新了我提供的示例,以显示此解决方案保留了特殊字符。我已经尝试了您的代码。我被提到错误:AttributeError:无法pickle本地对象“..”,它似乎与不可打印字符问题无关。我怀疑您正在使用的代码中有更多的代码没有共享。你能发布编辑问题并添加完整代码吗?
import string
sc.textFile(inputPath to csv file)\
.map(lambda x: ','.join([''.join(e for e in y if e in string.printable).strip('\"') for y in x.split(',')]))\
.saveAsTextFile(output path )