【问题标题】:Delta encoders: Using Java library in ScalaDelta 编码器:在 Scala 中使用 Java 库
【发布时间】:2020-10-23 18:33:21
【问题描述】:

我必须使用基于 Spark 的大数据分析数据集(文本文件)进行比较,这些数据集非常相似 (>98%),但大小非常大。在做了一些研究之后,我发现最有效的方法可能是使用 delta 编码器。有了这个,我可以有一个参考文本并将其他文本存储为增量增量。但是,我使用的 Scala 不支持增量编码器,而且我完全不熟悉 Java。但是由于 Scala 可以与 Java 互操作,我知道可以让 Java lib 在 Scala 中工作。

我发现有希望的实现是xdeltavcdiff-javabsdiff。通过更多搜索,我找到了最有趣的库,dez。该链接还提供了似乎表现非常好的基准,并且代码可以免费使用并且看起来很轻量级。

此时,我坚持在 Scala 中使用这个库(通过 sbt)。我将不胜感激任何建议或参考来解决这个障碍,无论是特定于这个问题(增量编码器)、库还是在 Scala 中使用 Java API。具体来说,我的问题是:

  1. 是否有我可以直接使用的增量编码器的 Scala 库? (如果没有)

  2. 是否可以将类文件/notzed.dez.jar 放在项目中,让 sbt 在 Scala 代码中提供 API?

我有点陷入这个泥潭,任何出路都将不胜感激。

【问题讨论】:

    标签: java scala delta


    【解决方案1】:

    有几个细节需要考虑。在 Scala 中直接使用 Java 库没有问题,在 sbt 中用作依赖项或用作非托管依赖项https://www.scala-sbt.org/1.x/docs/Library-Dependencies.html:“lib 中的依赖项在所有类路径上(用于编译、测试、运行和控制台)”。您可以使用 https://github.com/sbt/sbt-native-packager 使用您的代码和依赖项创建一个 fat jar,并使用 Spark Submit 分发它。

    这里的重点是在 Spark 中使用这些框架。要利用 Spark,您需要将文件拆分为块,以便为一个文件在集群中分发算法。或者,如果您的文件被压缩并且您将它们中的每一个都放在一个 hdfs 分区中,您将需要调整 hdfs 块的大小等...

    您可以使用 C 模块并将它们包含在您的项目中并通过 JNI 调用它们,因为深度学习框架等框架使用原生线性代数函数等。因此,本质上,关于如何实现有很多讨论Spark 中的这些 delta 算法。

    【讨论】:

    • 谢谢。我将研究推荐的方法。
    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2013-08-16
    • 2023-04-11
    相关资源
    最近更新 更多