spark读取HBASE数据不能打印数据

部落酋长 2018-05-14 04:36:25
按官方文档写了以下代码:

//读取数据并转化成rdd
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
classOf[org.apache.hadoop.hbase.client.Result])

val count = hBaseRDD.count()
println(count)

hBaseRDD.foreach{case (_,result) =>{
//获取行键
val key = Bytes.toString(result.getRow)
//通过列族和列名获取列
val name = Bytes.toString(result.getValue("A".getBytes,"姓名".getBytes))
val age = Bytes.toInt(result.getValue("A".getBytes,"年龄".getBytes))
println("Row key:"+key+"FileName :"+姓名+" 年龄:"+age)
}}

执行成功。但是未能打印出每条数据的具体信息,日志如下:

18/05/14 16:26:50 INFO DAGScheduler: ResultStage 0 (count at test.scala:64) finished in 2.515 s
18/05/14 16:26:50 INFO DAGScheduler: Job 0 finished: count at test.scala:64, took 2.642359 s
38
18/05/14 16:26:50 INFO SparkContext: Starting job: foreach at test.scala:71
18/05/14 16:26:50 INFO DAGScheduler: Got job 1 (foreach at test.scala:71) with 1 output partitions
18/05/14 16:26:50 INFO DAGScheduler: Final stage: ResultStage 1 (foreach at test.scala:71)
18/05/14 16:26:50 INFO DAGScheduler: Parents of final stage: List()
18/05/14 16:26:50 INFO DAGScheduler: Missing parents: List()
18/05/14 16:26:50 INFO DAGScheduler: Submitting ResultStage 1 (NewHadoopRDD[0] at newAPIHadoopRDD at test.scala:60), which has no missing parents
18/05/14 16:26:50 INFO MemoryStore: Block broadcast_2 stored as values in memory (estimated size 2.1 KB, free 897.2 MB)
18/05/14 16:26:50 INFO MemoryStore: Block broadcast_2_piece0 stored as bytes in memory (estimated size 1334.0 B, free 897.2 MB)
18/05/14 16:26:50 INFO BlockManagerInfo: Added broadcast_2_piece0 in memory on 10.251.6.153:56001 (size: 1334.0 B, free: 897.6 MB)
18/05/14 16:26:50 INFO SparkContext: Created broadcast 2 from broadcast at DAGScheduler.scala:1006
18/05/14 16:26:50 INFO DAGScheduler: Submitting 1 missing tasks from ResultStage 1 (NewHadoopRDD[0] at newAPIHadoopRDD at test.scala:60) (first 15 tasks are for partitions Vector(0))
18/05/14 16:26:50 INFO TaskSchedulerImpl: Adding task set 1.0 with 1 tasks
18/05/14 16:26:50 INFO TaskSetManager: Starting task 0.0 in stage 1.0 (TID 1, 10.124.130.14, executor 2, partition 0, ANY, 4919 bytes)
18/05/14 16:26:50 INFO BlockManagerInfo: Added broadcast_2_piece0 in memory on 10.124.130.14:54410 (size: 1334.0 B, free: 366.3 MB)
18/05/14 16:26:51 INFO BlockManagerInfo: Added broadcast_0_piece0 in memory on 10.124.130.14:54410 (size: 29.8 KB, free: 366.3 MB)
18/05/14 16:26:52 INFO TaskSetManager: Finished task 0.0 in stage 1.0 (TID 1) in 2453 ms on 10.124.130.14 (executor 2) (1/1)
18/05/14 16:26:52 INFO TaskSchedulerImpl: Removed TaskSet 1.0, whose tasks have all completed, from pool
18/05/14 16:26:52 INFO DAGScheduler: ResultStage 1 (foreach at test.scala:71) finished in 2.454 s
18/05/14 16:26:52 INFO DAGScheduler: Job 1 finished: foreach at test.scala:71, took 2.469872 s


红色字体是HBASE表的总行数,但是下面的foreach没有任何数据打印出来,查了好几天了没找到问题所在
请大神赐教
...全文
1049 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_34168425 2018-07-27
  • 打赏
  • 举报
回复
hBaseRDD.collect().foreach{case (_,result
chencang_xuejishu 2018-07-11
  • 打赏
  • 举报
回复
hBaseRDD.foreach{case (_,result) 改为
hBaseRDD.collect().foreach{case (_,result) 应该就可以了
kxiaozhuk 2018-07-06
  • 打赏
  • 举报
回复
RDD里面的map和foreach里面的操作是分布式的,在里面用print本来就是打不出log的。你要打出来得先collect回来再foreach就可以了。
LinkSe7en 2018-07-06
  • 打赏
  • 举报
回复
你foreach算子是在executor上执行的。你可以在SparkHistoryServer页面,找到对应的Application,然后看Executor页面,查看stdout/stderr,就看到打印信息了
JasonsTiananan 2018-05-31
  • 打赏
  • 举报
回复
RDD的操作是惰性操作的吧,foreach能够触发操作吗?
zgycsmb 2018-05-25
  • 打赏
  • 举报
回复
数据进了hbase吗
部落酋长 2018-05-21
  • 打赏
  • 举报
回复
没人知道吗,自己顶一下
qq_38814020 2018-05-21
  • 打赏
  • 举报
回复
result里面没有值吧
部落酋长 2018-05-15
  • 打赏
  • 举报
回复
引用 1 楼 qq_39869388 的回复:
{case (_,result) =>{ 是什么鬼,你result里什么值都没吧,你怎么取值
我也怀疑过这个问题,但是应该不是: 1、上面的count可以得到正确的行数 2、网上的例子都是这样的https://blog.csdn.net/u013468917/article/details/52822074 还有可能是什么原因?
  • 打赏
  • 举报
回复
{case (_,result) =>{ 是什么鬼,你result里什么值都没吧,你怎么取值

1,270

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧