如果您直接创建/写入,Hadoop 默认会序列化对象,因此您会在文件中看到额外的字符。但是,当您使用copyFromLocal
.
序列化是将结构化对象转换为字节流的过程。它基本上有两个目的:1)通过网络传输(进程间通信)。2) 用于写入持久存储。
您可以使用以下 R 代码反序列化 hadoop 对象:
hfile = hdfs.file("brian.txt", "r") # read from hdfs
file <- hdfs.read(hfile)
file <- unserialize(file) # deserialize to remove special characters
hdfs.close(hfile)
如果您计划从 R 创建文件,但不会通过 R 读取,那么避免特殊字符的解决方法是将内容保存到本地文件并将文件移动到 hdfs。下面是R代码:
# Set environment path and load library
Sys.setenv("HADOOP_CMD"="/usr/local/hadoop/bin/hadoop")
library(rhdfs)
hdfs.init() # Initialize
text <- "Hi, This is a sample text."
SaveToLocalPath <- "/home/manohar/Temp/outfile.txt"
writeLines(text, SaveToLocalPath) # write content to local file
hdfs.put(SaveToLocalPath, "/tmp") # Copy file to hdfs
file.remove(SaveToLocalPath) # Delete from local