spark任务读取资源文件示例
2016-05-26 18:10
288 查看
我遇到下面的问题:给定一批ID,大约几万个,然后去日志里面把包含他们的记录捞出来。我们很自然想到的解决方法是:把这些ID写入一个文件,spark任务先读出这个文件的内容,然后再把内容广播到每个工作节点。这样做的话,我们又有两个选择,一是把ID写入一个HDFS文件,spark任务读出并广播,然而这种做法需要把HDFS文件的路径写死在代码里,万一不小心删除或者移动了文件,spark任务就会失败,另外这种把代码和资源分开的做法在有些场景下是不可行的。所以我们可以考虑另外一种选择,把ID写入资源文件,并打入jar包,spark任务首先从jar包中解析资源内容,然后广播。
下面假设你已经创建好资源并放在下面目录
src/main/resources
第一步。首先配置maven的资源选项,比如
这样一来我们分别制定了资源所在的位置和打包后的位置
第二步,在程序里读出该资源并广播:
下面假设你已经创建好资源并放在下面目录
src/main/resources
第一步。首先配置maven的资源选项,比如
这样一来我们分别制定了资源所在的位置和打包后的位置
第二步,在程序里读出该资源并广播:
val source = Source.fromURL(this.getClass.getClassLoader.getResource("resource/your.data")) val adgroupId = source.getLines().toArray.filter(item=>item.trim.length>0).map(item=>item.split(",")(0).toLong).toSet val adgroupId_b = sc.broadcast(adgroupId)这里需要指出的是,当资源打入jar包后就成整个jar文件的一部分而不再是一个单独的文件,所以不能用文件系统的路径来指明他,也不能用普通的读文件方法去读他。上面的代码指明了在spark中该如何读资源。
相关文章推荐
- Android开发——Toast(吐司)的基本使用
- 登录
- 通过模仿AsyncTask的封装方式,实现一个后台预读数据的线程,(使用AsyncTask有导致应用FC的风险)
- 关于iOS UILabel 设置 UIEdgeInsets
- PyQt5环境搭建
- Android 自定义组件及组件如何保存/恢复状态
- 如何使用JAVA语言抓取某个网页中的邮箱地址
- NYOJ-取石子(六)
- 判断NSString 是否为数字
- 一个输入指定盘符和文件名检索文件存在路径的c#程序
- Java之父、子实例的内存控制
- PG监控命令
- android 开源
- Oracle 表空间
- iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
- 剔除集合中多余的相同的值
- 设置登录窗口
- firefox无法安装未通过验证的扩展
- QuickSort快速排序-Java
- 关于Android 添加系统级(java)服务和调用的编写实现说明