PartitionBy删除PySpark中的特殊字符

时间:2017-09-08 13:50:07

标签: hadoop pyspark-sql

我有一个包含3列的数据帧(df)(col1 string,col2 int,col3 string),如下所示,但有数百万条记录:

Test's  123   abcdefgh
Tes#t   456   mnopqrst  
Test's  789   hdskfdss 

当我尝试使用PySpark使用以下语句编写数据时,Col1中的特殊字符将丢失,并在hdfs中创建目录时替换为ascii字符。在将此数据帧写入hdfs时,是否有任何方法可以保留特殊字符并将其包含在目录路径中?

df.write.partitionBy("col1","col2").text(hdfs_path)

如果我感到困惑并需要更多细节,请告诉我。我正在使用Spark 1.6.1

1 个答案:

答案 0 :(得分:0)

建议不要在文件路径中包含特殊字符。 hadoop shell中的URI路径不支持某些特殊字符,建议仅使用JAVAURI中提到的字符: http://docs.oracle.com/javase/7/docs/api/java/net/URI.html

通过将字符替换为表示UTF-8字符集中该字符的转义八位字节序列来编码字符:'%27替换#由{%23替换1}}。

如果您想使用原始字符串读取文件名,请使用urllib' s quote功能:

import urllib

file_name = "Tes#t"
url_file_name = urllib.parse.quote(file_name)
print (url_file_name)
print (urllib.parse.unquote(url_file_name))

    Tes%23t
    Tes#t