Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何使用pyspark删除rdd中不可打印的字符_Apache Spark_Pyspark_Rdd - Fatal编程技术网

Apache spark 如何使用pyspark删除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

需要从rdd中删除不可打印的字符

样本数据如下

"@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 )