Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在apachespark中创建bucket_Apache Spark_Pyspark - Fatal编程技术网

Apache spark 在apachespark中创建bucket

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

我希望将数据存储在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.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(添加),但显示未定义添加