Apache spark Spark:IDF的TreeAgregate需要很长时间
我使用的是Spark 1.6.1,我有一个数据帧,如下所示:Apache spark Spark:IDF的TreeAgregate需要很长时间,apache-spark,Apache Spark,我使用的是Spark 1.6.1,我有一个数据帧,如下所示: +-----------+---------------------+-------------------------------+ |ID |dateTime |title | +-----------+---------------------+-------------------------------+ |809907895 |20
+-----------+---------------------+-------------------------------+
|ID |dateTime |title |
+-----------+---------------------+-------------------------------+
|809907895 |2017-01-21 23:00:01.0| |
|1889481973 |2017-01-21 23:00:06.0|Man charged with murder of ... |
|979847722 |2017-01-21 23:00:09.0|Munster cruise to home Cham... |
|18894819734|2017-01-21 23:00:11.0|Man charged with murder of ... |
|17508023137|2017-01-21 23:00:15.0|Emily Ratajkowski hits the ... |
|10321187627|2017-01-21 23:00:17.0|Gardai urge public to remai... |
|979847722 |2017-01-21 23:00:19.0|Sport |
|19338946129|2017-01-21 23:00:33.0| |
|979847722 |2017-01-21 23:00:35.0|Rassie Erasmus reveals the ... |
|1836742863 |2017-01-21 23:00:49.0|NAMA sold flats which could... |
+-----------+---------------------+-------------------------------+
我正在做以下操作:
val aggDF = df.groupBy($"ID")
.agg(concat_ws(" ", collect_list($"title")) as "titlesText")
然后在aggDF
DataFrame上,我安装了一个从titleText
列中提取TFIDF特性的管道(通过应用tokenizer
,stopWordRemover
,HashingTF
然后IDF
)
当我调用pipline.fit(aggDF)
时,代码到达IDF.scala:54的一个阶段treeaggreegate(我可以在UI上看到),然后它卡在那里,没有任何进展,没有任何错误,我等待了很长时间,没有任何进展,也没有关于UI的有用信息
下面是我在UI中看到的示例(很长一段时间内没有任何变化):
- 可能的原因是什么
- 如何跟踪和调试此类问题
- 有没有其他方法可以提取相同的特征
您指定了吗
因为IDF必须处理的数据量将与HashingTF生成的功能数量成正比,并且很可能会在磁盘上溢出大量数据,这会浪费时间。我猜您的数据比上表中的数据大?看起来有一个2.7GB的随机写入,这可能需要相当长的时间,这取决于分区的数量等。是的,数据确实比示例大得多。我只是让分区保持默认状态。改变分割可以让事情变得更好吗?@Derek_M增加分区的数量会因为分区之间的混乱而导致更多的计算时间吗?有没有根据并行度(执行器等)设置分区大小的启发式方法?是的,我选择它等于500,它有那么大吗?不,那没什么,对于大型词汇表来说,这还不够,我建议不要设置它并检查日志,看看哈希表自然有多大。例如,在HashingTF之后,我最初有大约262k个条目,我将其减少到50k。