代码之家  ›  专栏  ›  技术社区  ›  Georg Heiler

在PySpark中访问scala函数

  •  0
  • Georg Heiler  · 技术社区  · 7 年前

    我有一个Scala库,其中包含Scala Spark API的一些实用程序代码和UDF。 Running custom Java class in PySpark 但是,当我使用Scala编写的库时,某些类的名称可能不直接,并且包含如下字符 $

    1 回复  |  直到 7 年前
        1
  •  2
  •   10465355 user11020637    7 年前

    一般来说,你不会。虽然在这种情况下有时可以访问,但使用 __getattribute__ / getattr

    实际上,您应该做Spark内部所做的事情——而不是直接公开Scala API,而是创建一个lean*Java或Scala API,它是专门为与来宾语言的互操作性而设计的。由于Py4j只提供基本Python和Java类型之间的转换,并且不处理常用的Scala接口,所以您无论如何都需要这样的中间层,除非Scala库是专门为Java互操作性设计的。

    作为你最后的顾虑

    Py4j可以很好地处理Java泛型,无需任何特殊处理。高级Scala特性(清单、类标记、类型标记)通常是不可行的,但同样,在设计时没有考虑Java互操作性(尽管这是可能的)。


    *根据经验,如果某个东西是Java友好的(不需要任何疯狂的破解、广泛的类型转换,或者填充Scala编译器通常处理的空白),那么它也应该很适合PySpark。

    推荐文章