Apache spark 在apachespark中创建bucket
我希望将数据存储在spark中,以便差为5秒或更少的时间戳与相应的数据一起落入一个5秒的存储桶中。同样,下一组5秒存储桶将包含剩余日志。(以便我可以聚合存储桶中的数据)。我的日志:Apache spark 在apachespark中创建bucket,apache-spark,pyspark,Apache Spark,Pyspark,我希望将数据存储在spark中,以便差为5秒或更少的时间戳与相应的数据一起落入一个5秒的存储桶中。同样,下一组5秒存储桶将包含剩余日志。(以便我可以聚合存储桶中的数据)。我的日志: 1472120400.107 HTTP GEO er.aujf.csdh.jkhydf.eyrgt 1472120399.999 HTTP GEO er.asdhff.cdn.qyirg.sdgsg 1472120397.633 HTTP GEO er.abff.kagsf.weyfh.ajfg 1472120397
1472120400.107 HTTP GEO er.aujf.csdh.jkhydf.eyrgt
1472120399.999 HTTP GEO er.asdhff.cdn.qyirg.sdgsg
1472120397.633 HTTP GEO er.abff.kagsf.weyfh.ajfg
1472120397.261 HTTP GEO er.laffg.ayhrff.agyfr.yawr
1472120394.328 HTTP GEO er.qfryf.aqwruf.oiuqwr.agsf
1472120393.737 HTTP GEO er.aysf.aouf.ujaf.casf
.
.
.
我还是不知道怎样在spark里做
时间戳为1472120400.1071472120399.9991472120397.6331472120397.261等的日志落入一个桶中,下一组在下一个桶中,依此类推
输出:
时间戳为1472120400.1071472120399.9991472120397.6331472120397.261的所有日志行都将保存在内存中(一个存储桶),以便对这些日志行进行进一步处理,例如查找整个存储桶的计数。类似地,下一个bucket。只需将时间戳除以要创建的粒度即可。将bin编号保留为PAIRDD中的键,其中数据为输入,然后还原为YKEY 我将用Scala编写代码示例,基本上,我想强调的是,将其转换为python并不重要
val l5 = List("1472120400.107 HTTP GEO er.aujf.csdh.jkhydf.eyrgt", "1472120399.999 HTTP GEO er.asdhff.cdn.qyirg.sdgsg")
val l5RDD = sc.parallelize(l5) //input as RDD
val l5tmp = l5RDD.map(item => item.split(" ")) //Split the sentence
val l5tmp2 = l5tmp.map(item => ((item(0).toDouble/3600000).toInt, List(item))) //Map the data to a bin (in the key) according to the wanted granularity
val collected = l5tmp2.reduceByKey(_ ++ _) //Collect the lists to create the bins of data
collected.collect().foreach(println) //Prints (408,List([Ljava.lang.String;@2c6aed22, [Ljava.lang.String;@e322ec9)) - means that both entries collected to a bin named 408
只需将时间戳除以要创建的粒度即可。将bin编号保留为PAIRDD中的键,其中数据为输入,然后还原为YKEY 我将用Scala编写代码示例,基本上,我想强调的是,将其转换为python并不重要
val l5 = List("1472120400.107 HTTP GEO er.aujf.csdh.jkhydf.eyrgt", "1472120399.999 HTTP GEO er.asdhff.cdn.qyirg.sdgsg")
val l5RDD = sc.parallelize(l5) //input as RDD
val l5tmp = l5RDD.map(item => item.split(" ")) //Split the sentence
val l5tmp2 = l5tmp.map(item => ((item(0).toDouble/3600000).toInt, List(item))) //Map the data to a bin (in the key) according to the wanted granularity
val collected = l5tmp2.reduceByKey(_ ++ _) //Collect the lists to create the bins of data
collected.collect().foreach(println) //Prints (408,List([Ljava.lang.String;@2c6aed22, [Ljava.lang.String;@e322ec9)) - means that both entries collected to a bin named 408
您期望的输出是什么?您所说的“bucket”是什么意思?这只是对日志进行分区。分区的日志组构成了bucket。您期望的输出是什么?您所说的“bucket”是什么意思?这只是对日志进行分区。分区的日志组构成了bucket。我不理解这部分代码:
val collected=l5tmp2.reduceByKey(++)
。什么是++?@kaks您需要定义如何收集项目,在本例中,我将项目保留在列表中,因此为了将列表添加到一起,我使用++。每个列表将包含所有应归入BIN的项。您能告诉我们如何用python编写这些项吗?我在这方面遇到了困难。你能告诉我如何用python编写它吗。我尝试了reduceByKey(add),但显示add未定义。我不理解这部分代码:val collected=l5tmp2。reduceByKey(++)
。什么是++?@kaks您需要定义如何收集项目,在本例中,我将项目保留在列表中,因此为了将列表添加到一起,我使用++。每个列表将包含所有应归入BIN的项。您能告诉我们如何用python编写这些项吗?我在这方面遇到了困难。你能告诉我如何用python编写它吗。我尝试了reduceByKey(添加),但显示未定义添加