我使用Spark wholeTextFiles API从源文件夹中读取文件并将其加载到hive表。
文件从远程服务器到达源文件夹。文件大小如1GB-3GB。文件的SCP花了很长时间。
如果我启动spark作业并且文件被SCPd保存到源文件夹并且进程中途,那么会选择文件吗?
如果文件处于中途时选择文件,则会出现问题,因为它会忽略文件的其他内容。
答案 0 :(得分:1)
如果您正在将文件保存到源文件夹中;然后火花从那个文件夹中读取;可能会发生这样的情况,因为SCP可能需要一些时间才能复制,所以半文写入的文件会被火花挑选。
这肯定会发生。
您的任务是 - 如何不直接在该源文件夹中书写 - 以便Spark不会选择不完整的文件。
可能的解决方法:
sc.wholeTextFiles(...)
时,只选择那些具有零kb对应文件的文件名 - 使用地图。答案 1 :(得分:1)
可能的解决方法:
所以,这是检查src文件夹中是否存在Corresponidng .ctl
文件的代码。
val fr = sc.wholeTextFiles("D:\\DATA\\TEST\\tempstatus")
// Get only .ctl file
val temp1 = fr.map(x => x._1).filter(x => x.endsWith(".ctl"))
// Identify corresponding REAL-FILEs - without .ctl suffix
val temp2 = temp1.map(x => (x.replace(".ctl", ""),x.replace(".ctl", "")))
val result = fr
.join(xx)
.map{
case (_, (entry, x)) => (x, entry)
}
...根据需要处理rdd result
。
rdd temp2
已从RDD[String]
更改为RDD[String, String]
- 用于JOIN
操作。没关系。