Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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_Dataframe_Apache Spark_Dataset - Fatal编程技术网

Scala 尽量避免火花收集

Scala 尽量避免火花收集,scala,dataframe,apache-spark,dataset,Scala,Dataframe,Apache Spark,Dataset,我看到了对任何使用spark的人的一般建议(在我使用Scala的情况下) 是为了避免任何将所有数据从执行器获取到驱动程序的操作(收集、计数、求和等)。 然而,当我尝试使用spark统计库时 我发现相关矩阵和检验方法 期望array\seq的数组或矩阵作为其参数,因此我不这样做 看看如何避免对数据帧进行收集(以及我假设的更多操作) 如果我想使用这个函数,就用向量而不是行类型。谢谢你的帮助 在您的示例中,Correlation.corr和ChiSquareTest.test都接受数据帧,因此在将数据

我看到了对任何使用spark的人的一般建议(在我使用Scala的情况下) 是为了避免任何将所有数据从执行器获取到驱动程序的操作(收集、计数、求和等)。 然而,当我尝试使用spark统计库时 我发现相关矩阵和检验方法 期望array\seq的数组或矩阵作为其参数,因此我不这样做 看看如何避免对数据帧进行收集(以及我假设的更多操作) 如果我想使用这个函数,就用向量而不是行类型。谢谢你的帮助

  • 在您的示例中,
    Correlation.corr
    ChiSquareTest.test
    都接受数据帧,因此在将数据传递给这些函数之前不需要收集数据。您必须在驱动程序上收集这些函数的结果,但这不会导致任何问题,因为输出大小应该比初始数据集小得多,并且应该很容易放入驱动程序的内存中
  • 对于您在评论中提出的关于
    groupBy
    /
    加入的问题,这些都是“昂贵的”,但原因不同。分组和联接会导致数据洗牌-因此,您的工作人员需要通过网络发送大量数据,这比本地数据处理要花费更多的时间。尽管如此,如果您必须这样做,也可以这样做,只需注意性能影响
  • collect
    方法不建议在完整数据集上使用,因为它可能会导致驱动程序上的OOM错误(想象一下,您有50 Gb的数据集,分布在一个集群上,现在在单个节点上收集),但是如果您已经处理了数据,并且您知道,会有一些合理数量的行-这样做是非常安全的<代码>计数
    从内存的角度来看应该不是问题,因为它只返回数据集中的行数,而不是将所有行发送到驱动程序节点

  • 它说尽量避免,而不是完全绕过它。收集操作需要获得任何相关的输出。我已经读到,由于驱动程序可能在大数据帧的情况下崩溃,不建议在生产中这样做。然而,我不确定我是否尝试在数据帧上执行许多操作,如groupBy和Join,这不是也很昂贵吗?我试着去理解什么是更好的方法。谢谢你的回答!有两件事需要澄清:1)是的,ChiSquareTest.test得到DF,但得到向量的seq。不是dataset(或者最好是dataset.2),一般来说,使用带有add lite(1)列的窗口函数而不是sum\count是一种好习惯吗?或者这是“付出了太多的代价”?1)在示例中,这是一个向量序列,之后被转换为数据帧(内部密集和稀疏向量),您可以使用
    map
    从您拥有的任何类型的数据创建数据帧,而不必将所有数据都放在驱动程序上。您可以在s3上创建一个包含点的文件,将其读入辅助对象,然后将这些点映射到向量。2) 我认为,实际上最好使用Spark的现有功能,如果它们符合您的目的,Spark通常可以更好地优化它们。所以,如果您只需要计数-直接使用计数而不是窗口,并且仅对非标准的内容使用窗口