sc.TextFile() 函数提交多个File

在写 Spark 程序时,如果数据源分散在不同位置,则需要在 sc.TextFile 的时候指定多个数据源

我们可能会想到的一种错误写法是:

错误写法:sc.TextFile( filename1, filename2, filename3)

经过试验发现,如果按照这种写法,在运行 Spark 的时候会报错退出,通过 applicationId 从 yarn logs 下载日志后,Traceback 找到 sc.textFile( ) 报错,错误提示没有这种方法,如下所示:

sc.TextFile() 函数提交多个File_第1张图片
Log 中显示 sc.TextFile( ) 方法异常

Apache 上有一个关于这个的讨论:"How to read multiple text files into a single RDD?"

链接是:Apache 讨论链接

主要提出的方法有三种:1、将多个文件变成一个 list 作为参数,准确的说是list_str,后面会详细解释,2、使用 union 连接,3、使用 repartition,我们这里采用最简单直接的第一种方法,修改后的写法是:

正确写法:sc.TextFile( filename1 + "," + filename2 + "," + filename3)

修改后程序就可以正常运行了,截图如下所示:

sc.TextFile() 函数提交多个File_第2张图片
调整后,成功运行结束

可见 sc.TextFile( ) 的参数接收的一个 file,或者一个 list_str 的格式,进去该函数以后首先应该会有 split 操作重新转换成 list,然后再寻找所有的 File 数据,有兴趣的同学可以找源码看下。

你可能感兴趣的:(sc.TextFile() 函数提交多个File)