rdd踩坑总结

本文总结了在使用Spark的RDD操作时遇到的一些常见问题和解决方案,包括如何正确处理不同场景下的数据分隔,例如以指定分隔符读取配置文件、以Key-Value形式存储数据,以及从Hive表中提取数据并转换为List或Map类型。同时强调了在处理数据时注意分隔符的选择和数据格式的保持,以避免数据丢失或错误。
摘要由CSDN通过智能技术生成

1、常用场景

(1)场景一:rdd读取指定行分隔符的数据,不以每行为单位例1:配置文件中有n个sql语句,每个sql以分号----分隔。你需要读取sql,分别从hdfs中拉取数据。可能会采取://conf_sql_map_file 是sql配置文件val sql_rdd = sc.textFile(conf_sql_map_file)var sqls = sql_rdd.collect().mkString(" ").split("----")分析:由于rdd以每行为单位,自动去掉结尾的 换行符。但sql配置文件需要以指定分隔符分隔,而不是每行。所以使用 mkString(" ") 将读取的每行数据以空格分隔,整合为一个长字符串,最后以分隔符分隔。但如果 sql 语句中有使用 with 之类的关键词时,上面那种方式读取配置文件会因为格式问题会出错,with语句需要和 select 语句空行分隔,为保险起见,以 “\n” 分隔,还原配置文件的原始格式。var sqls = sql_rdd.collect().mkString("\n").split("----")

(2)场景二:读取文件,以 key-value 形式存储。例2:文件file1内容如下key1,value1key2,value2var file_rdd = sc.textFile(file1).map(e=> (e.split(',')(0),e.split(',')(1))).collectAsMap或者 不从文件读取,直接使用List类型数据演示scala> var line_rdd = sc.parallelize(List[String]("k,v&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值