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
Scala 基本火花-是什么导致程序运行缓慢?_Scala_Apache Spark_Pyspark - Fatal编程技术网

Scala 基本火花-是什么导致程序运行缓慢?

Scala 基本火花-是什么导致程序运行缓慢?,scala,apache-spark,pyspark,Scala,Apache Spark,Pyspark,我是新来的pyspark。致力于国情咨文地址数据集(SOU)(我在机器学习课程中获得了该数据集)[*] 简而言之,我的问题是: 我比较了在SOU上使用pyspark中的一些非常基本的操作与使用更大的随机数据集。由于某种原因,随机数据集的处理速度要快得多关于spark的工作原理,我在这里遗漏了什么,如何解释这种差异?我处理SOU数据集的方式可能有哪些错误,导致处理速度慢? 所有的代码和输出都在这个笔记本中,我比较了数据集,以表明它们是相似的,但运行时间相差很大[**] 稍后添加:这是程序的一部分(

我是新来的
pyspark
。致力于国情咨文地址数据集(SOU)(我在机器学习课程中获得了该数据集)[*]

简而言之,我的问题是:

我比较了在SOU上使用
pyspark
中的一些非常基本的操作与使用更大的随机数据集。由于某种原因,随机数据集的处理速度要快得多关于
spark
的工作原理,我在这里遗漏了什么,如何解释这种差异?我处理SOU数据集的方式可能有哪些错误,导致处理速度慢?

所有的代码和输出都在这个笔记本中,我比较了数据集,以表明它们是相似的,但运行时间相差很大[**]

稍后添加:这是程序的一部分(稍有不同的版本)


详细说明

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)使用上述字典,我将每个语音
文本[k]
表示为整数数组
vec[I]
。其中
vec[i]
统计单词
V[i]
text[k]
中出现的次数

3)我想通过比较代表演讲的向量之间的距离来比较演讲

4)我使用
rdd
class[***]的
cartesian
方法查找所有成对演讲之间的距离。构造笛卡尔积需要太长的时间来处理(即使是在SOU数据集的一个小的子样本上),但当我在随机较大的
rdd
向量上运行相同的代码时就不需要了

深入挖掘,我试图了解是什么导致了这个问题。我已经模仿了同样的步骤,在由一组随机向量组成的
rdd
上应用
cartesian


[*]我发现了一个类似的数据集

[**]读取随机数据集
6.07899999619秒
vs SOU数据集
24.2050001621秒
。采用笛卡尔坐标是
3.29400014877秒
vs
37.8359999657秒


[***]

一件显而易见的事情可能是分区的数量不同。如果您直接在tar.gz中阅读,spark可能只会将其放在一个分区中。@jamborta谢谢!我检查了两个
rdd
都使用了1个分区,这样差异就无法解释差异。我相信有一些基本的错误,我做的,完整的数据集只有23兆字节,我只看它的10%,仍然需要很长的时间来处理。。。我一定是在做一些非常低效的事情,因为我所有的操作都是非常基本的,肯定有一些简单的事情我做错了。。。我已经用
.getNumPartitions()
查询相关的
rdd
s更新了我的Jupyter笔记本。我在原始帖子中添加了程序的DAG图,以防有帮助。Ok。我的第二个猜测是,SOU数据是从磁盘读取的,而随机数据是在内存中创建的,因此存在差异。在进行笛卡尔运算之前,尝试将
.persist()
添加到您的sourdd。我认为17s vs 5s是因为line
words\u tmp\u 2。take
是缓存结果后您调用
take
的第一个实例,因此它会执行缓存以及该行DAG上游的所有其他步骤(可能还包括读取位)。至于笛卡尔函数,根据实现的不同,Spark会在DAG中重复前面的一些步骤,如果对每一行重复这些步骤,这可能是非常重要的。一件显而易见的事情可能是分区的数量不同。如果您直接在tar.gz中读取,Spark可能只会将其放在一个分区中。@jamborta Thanks!我检查了两个
rdd
都使用了1个分区,这样差异就无法解释差异。我相信有一些基本的错误,完整的数据集只有23兆字节,我只看了其中的10%,但处理起来仍然需要很长时间……我一定做了一些非常低效的事情,因为我所有的操作都非常复杂基本的,一定有一些简单的事情我做错了…我用
.getNumPartitions()更新了我的Jupyter笔记本
查询相关的
rdd
s。我在原始帖子中添加了程序的DAG图,以防它有所帮助。好的。我的第二个猜测是,您的SOU数据是从磁盘读取的,而您的随机数据是在内存中创建的,因此存在差异。请尝试添加
.persist()
在你做笛卡尔坐标之前给你的SOU RDD。我认为17s vs 5s是因为line
words\u tmp\u 2。take
是缓存结果后你调用
take
的第一个实例,所以它会缓存该行以及DAG中上游的所有其他步骤(可能也包括读取位)。至于笛卡尔坐标系,根据实现情况,Spark将在DAG中重复前面的一些步骤,如果对每一行重复这些步骤,则可能是实质性的。