我有一个包含以下列的数据框。
scala> show_times.printSchema
root
|-- account: string (nullable = true)
|-- channel: string (nullable = true)
|-- show_name: string (nullable = true)
|-- total_time_watched: integer (nullable = true)
这是有关客户观看特定节目的次数的数据。我应该根据观看的总时间对每个节目的客户进行分类。
该数据集共有 1.33 亿行,其中 192 个不同的行show_names
.
对于每个单独的节目,我应该将客户分为 3 类(1、2、3)。
我使用 Spark MLlib分位数离散化器 http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.ml.feature.QuantileDiscretizer
目前我循环播放每个节目并运行QuantileDiscretizer
按照以下代码所示的顺序方式。
我最终想要的是以下示例输入以获得示例输出。
输入示例:
account,channel,show_name,total_time_watched
acct1,ESPN,show1,200
acct2,ESPN,show1,250
acct3,ESPN,show1,800
acct4,ESPN,show1,850
acct5,ESPN,show1,1300
acct6,ESPN,show1,1320
acct1,ESPN,show2,200
acct2,ESPN,show2,250
acct3,ESPN,show2,800
acct4,ESPN,show2,850
acct5,ESPN,show2,1300
acct6,ESPN,show2,1320
示例输出:
account,channel,show_name,total_time_watched,Time_watched_bin
acct1,ESPN,show1,200,1
acct2,ESPN,show1,250,1
acct3,ESPN,show1,800,2
acct4,ESPN,show1,850,2
acct5,ESPN,show1,1300,3
acct6,ESPN,show1,1320,3
acct1,ESPN,show2,200,1
acct2,ESPN,show2,250,1
acct3,ESPN,show2,800,2
acct4,ESPN,show2,850,2
acct5,ESPN,show2,1300,3
acct6,ESPN,show2,1320,3
有没有一种更有效和分布式的方法来使用一些groupBy
类似操作而不是循环遍历每个show_name
然后一个接一个地把它扔进垃圾桶?