textfilestream_Spark从本地文件流式传输到hdfs。textFileStream-问答-阿里云开发者社区-阿里云...

我正在尝试将本地目录内容流式传输到HDFS。脚本将修改此本地目录,并且每5秒添加一次内容。我的spark程序将流式传输本地目录内容并将其保存到HDFS。但是,当我开始流式传输时,没有任何事情发生。我检查了日志,但我没有得到提示。

让我解释一下这个场景。shell脚本将在本地目录中每5秒移动一个带有一些数据的文件。流上下文的持续时间对象也是5秒。当脚本移动一个新文件时,如果我没有错,则保持原子性。接收器将每隔五秒处理数据并创建Dstream对象。我刚刚搜索了流本地目录,发现路径应该提供为“file:/// my / path”。我没试过这种格式。但如果是这种情况,那么节点的spark执行器将如何保持所提供的本地路径的公共状态?

import org.apache.spark._

import org.apache.spark.streaming._

val ssc = new StreamingContext(sc, Seconds(5))

val filestream = ssc.textFileStream("/home/karteekkhadoop/ch06input")

import java.sql.Timestamp

case class Order(time: java.sql.Timestamp, orderId:Long, clientId:Long, symbol:String, amount:Int, price:Double, buy:Boolean)

import java.text.SimpleDateFormat

val orders = filestream.flatMap(line => {

val dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")

var s = line.split(",")

try {

assert(s(6) == "B" || s(6) == "S")

List(Order(new Timestamp(dateFormat.parse(s(0)).getTime()), s(1).toLong, s(2).toLong, s(3), s(4).toInt, s(5).toDouble, s(6)=="B"))

}catch{

case e: Throwable => println("Wrong line format("+e+") : " + line)

List()

}

})

val numPerType = orders.map(o => (o.buy, 1L)).reduceByKey((x,y) => x+y)

numPerType.repartition(1).saveAsTextFiles("/user/karteekkhadoop/ch06output/output", &#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值