我是pyspark
的新手。研究国情咨文地址数据集(SOU)(我在机器学习课程中给出了这个数据集)[*]。
我的问题简而言之:
我比较了pyspark
对SOU的一些非常基本的操作与较大的随机数据集的使用情况。由于某种原因,随机数据集的处理速度要快得多。 我在这里想到spark
如何运作,如何解释这种差异?在我处理导致处理速度慢的SOU数据集的方式上,我可能做错了什么?
所有代码和输出都在这个Jupyter笔记本中,我比较数据集以显示它们相似,但运行时间差异很大[**]。
Adde稍后:此处为DAG程序(版本略有不同)
的阐释
0)联合地址数据集的状态具有此形式
+--------------------+--------------------+----+
| president| text|year|
+--------------------+--------------------+----+
| James Monroe| Fellow-Citizens ...|1821|
| William McKinley| To the Senate an...|1897|
|Dwight D. Eisenhower|[Delivered in per...|1960|
| Calvin Coolidge|Since the close o...|1923|
| James Madison| Fellow-Citizens ...|1816|
其中text
是演讲的内容。
1)我想出了整个数据集的单个列表(或字典)V[i]
(留下大约2000个独特的单词 - 既不太罕见也不常见)。
2)使用上面的字典,我将每个语句text[k]
表示为整数数组vec[i]
。其中vec[i]
计算V[i]
中单词text[k]
的出现次数。
3)我想通过比较代表它们的向量之间的距离来比较语音。
4)为了找到所有演讲对之间的距离,我使用了cartesian
类[***]的rdd
方法。构造笛卡尔积可能需要很长时间才能处理(即使是在SOU数据集的一个小子样本上),但是当我在随机较大的rdd
向量上运行相同的代码时却不会。
深入挖掘我试图了解造成这个问题的原因。我已经模仿了在由cartesian
组成的一组随机向量上应用rdd
的相同步骤。
[*]我发现似乎是类似的数据集here
[**]读取随机数据集6.07899999619 sec
与SOU数据集24.2050001621 sec
。取cartesian
为3.29400014877 sec
vs 37.8359999657 sec
)
[***] Cartesian