我目前有一个Spark应用程序,可以读取几个文件并从中形成数据框,并在数据框上实现一些逻辑。
我可以看到这些文件的数量和大小在未来会有很大的增长,并希望了解幕后发生的事情,以便能够跟上这种增长。
首先,我只是想仔细检查一下,因为群集上的所有计算机都可以访问文件(这是spark的要求),所以从这些文件中读取数据的任务是分布式的,没有一台机器负担吗? 我正在查看这个应用程序的Spark UI,但由于它只显示哪些机器执行了哪些操作,因此" sc.textFile(filePath)"这不是一个动作,我无法确定哪些机器正在执行此读取。
其次,如果我从像Cassandra这样的数据库中读取这些数据而不仅仅是读取文件,我将面临哪些优点/缺点?
第三次,在我的应用程序中,我有一些代码,我在数据帧上执行一个收集(val treeArr = treeDF.collect())来获取一个数组,然后我在那些上实现了一些逻辑阵列。但由于这些不是RDD,Spark如何分配这项工作?还是根本分发它们? 换句话说,我是否应该在RDD上进行最大量的工作转换和执行操作,而不是将它们转换为数组或其他数据结构,然后像在任何编程语言中那样实现逻辑?
我只有大约两个星期的Spark,所以如果这些都是愚蠢的问题,我道歉!
答案 0 :(得分:1)
是的,sc.textFile
已分发。它甚至有一个可选的minPartitions
参数。
这个问题太宽泛了。但简短的回答是你应该为自己做基准测试。
collect
将所有数据提取到主服务器。之后,它只是一个普通的阵列。的确,如果你想进行分布式计算,你不应该使用collect
。