我有一个包含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
答案 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