Apache spark Timeseries图表:数据作为行而不是列
我想用一个条形图作为可视化,来描述在每个日期运行几个应用程序中的一个的次数(为简单起见,将应用程序想象为excel、word、powerpoint等。例如,在3月15日,如果用户打开excel一次,word两次,word将显示两个高度,excel等将显示一个高度) 可视化显示一年的堆叠数据(365条),其中每个堆叠条对每个程序使用不同的颜色。有20个程序。数据系列是堆叠的-例如,Word(如果有描述)始终位于底部,然后是Excel等 传统的方法是使用outerjoin,每天创建365行和20列(Word、Excel等),每列都有一个整数值。这种技术很有效,但在数据库上计算量很大(更不用说密集的SQL),我想知道是否有人知道处理此问题的timeseries图表工具。 这是一个数据透视问题:我想提取行中的数据,让图表产品组装条形图。它需要从数据中读取数据系列名称,并在遇到新值时创建一个新的数据系列。我实际上有数千个可能的程序,但每个图表不太可能需要描述超过20个 图表产品的工作原理如下: minDate=20150101,maxDate=20151231,间隔时间=天 然后数据就被删除了Apache spark Timeseries图表:数据作为行而不是列,apache-spark,c3.js,Apache Spark,C3.js,我想用一个条形图作为可视化,来描述在每个日期运行几个应用程序中的一个的次数(为简单起见,将应用程序想象为excel、word、powerpoint等。例如,在3月15日,如果用户打开excel一次,word两次,word将显示两个高度,excel等将显示一个高度) 可视化显示一年的堆叠数据(365条),其中每个堆叠条对每个程序使用不同的颜色。有20个程序。数据系列是堆叠的-例如,Word(如果有描述)始终位于底部,然后是Excel等 传统的方法是使用outerjoin,每天创建365行和20列(
20150315 "Word" 1
20150315 "Word" 1
20150315 "Excel" 1
20150316 "Powerpoint" 1
20150316 "Word" 1
或者,每行可以是每个计划每天的总数:
20150315 "Word" 2
20150315 "Excel" 1
20150316 "Powerpoint" 1
20150316 "Word" 1
我正在使用C3,使用spark和scala。我可以使用任何javascript库。您要问的是如何将数据从宽格式改为长格式。在spark中,您使用的是
DataFrame.explode
。假设您有这样的东西:
+--------+----+-----+
| date|word|excel|
+--------+----+-----+
|20150101| 3| 4|
|20150102| 1| 2|
+--------+----+-----+
您可以通过以下方式对其进行重塑:
df.explode($"word", $"excel"){case row =>
Seq(("Word", row.getInt(0)), ("Excel", row.getInt(1)))
}.select($"date", $"_1" as "app", $"_2" as "count")
为此:
+--------+-----+-----+
| date| app|count|
+--------+-----+-----+
|20150101| word| 3|
|20150101|excel| 4|
|20150102| word| 1|
|20150102|excel| 2|
+--------+-----+-----+