【发布时间】:2020-09-22 19:28:12
【问题描述】:
目前,我的主应用程序是用 Java Spring-boot 构建的,这不会改变,因为它很方便。@Autowired 服务 bean 实现,用于示例:
-
企业和企业数据集。第一个还能够返回一个 Enterprise 对象的列表,这些对象具有
Map的机构。
所以服务返回:Dataset<Enterprise>,Dataset<Establishment>,Dataset<Row> - 协会:
Dataset<Row> - 城市:
Dataset<Commune>或Dataset<Row>, - 地方当局:
Datatset<Row>.
许多用户案例函数都是这种调用:
什么是关联(年=2020)?
我的应用程序转发给datasetAssociation(2020),它与企业和机构数据集以及城市和地方当局的数据集一起操作,以提供有用的结果。
许多人建议我从 Scala 能力中受益
为此,我正在考虑在数据集之间进行涉及其他操作的操作:
- 一些由 Row 制成,
- 一些搬运混凝土物体。
就达到/涉及的数据集而言,我有这个操作要做:
协会。enterprises.establishments.cities.localautorities
我能在 Scala 中写粗体部分吗?这意味着:
-
使用 Java 代码构建的
Dataset<Row>被发送到 Scala 函数以完成。 -
Scala 使用
Enterprise和Establishment对象创建一个新数据集。
a) 如果对象的源代码是用 Scala 编写的 我不必在 Java 中为它重新创建新的源。
b) 相反,如果对象的源是用 编写的>Java,我不必在 Scala 中重新创建新的源代码。
c) 我可以使用 Scala 此数据集在 Java 端直接返回的对象。 -
Scala 将不得不调用在 Java 中实现的函数,并向它们发送它正在创建的底层数据集(例如,用城市信息完成它们)。
Java 随时调用 Scala 方法
Scala 也随时调用 Java 方法:
一个操作可以跟随aJava -> Scala -> Scala -> Java -> Scala -> Java -> Java
路径,如果需要,就调用方法的母语而言。
因为我事先不知道哪些部分对移植到 Scala 有用。
完成这三点后,我会认为 Java 和 Scala 能够以两种方式互操作并相互受益。
但是我可以实现这个目标吗(在Spark 2.4.x 或更可能在Spark 3.0.0)?
总结一下,是Java和Scala互操作的两种方式,一种方式是:
- 它不会使源代码的一侧或另一侧过于笨拙。或者最坏的情况:重复。
- 它不会严重降低性能(例如,必须重新创建整个数据集或转换其中包含的每个对象,无论是一侧还是另一侧,都会令人望而却步)。
【问题讨论】:
-
除了
Java -> Scala -> Scala -> Java -> Scala -> Java -> Java是否可行之外,目前尚不清楚您的问题是什么。考虑修改? -
我想将部分操作从 Java 移植到 Scala。假设该操作涉及数据集 A、B、C、D。我可能希望只移植数据集 C,例如在 Scala 中。然后 A 数据集(使用 Java 创建的)将加入或使用 B 的结果也使用 Java 创建,也可以使用 C,使用 Scala 和 Scala 程序创建它也必须调用 Java获取 D 数据集的函数。 Java 和 Scala 语言将混合使用。总体问题是:“真的有可能吗?”
-
我在
Java -> Scala -> Java -> Scala之前使用过这个互操作链,因此您期望使用的互操作链可以正常工作。 -
目前我不知道如何直接在 Java 中使用在 Scala 中创建的具体对象的数据集,而不通过 Parquet 存储来传输例如,使用第二个源文件在 Java 中设置和重新创建类似的对象。这就是我问的原因。
标签: java scala apache-spark scala-java-interop