我一直在寻找是否有某种方法可以使用中的Scala
类Pyspark
,但我还没有找到任何文档或有关此主题的指南。
假设我创建了一个简单的类,Scala
其中使用的一些库apache-spark
,例如:
class SimpleClass(sqlContext: SQLContext, df: DataFrame, column: String) {
def exe(): DataFrame = {
import sqlContext.implicits._
df.select(col(column))
}
}
Pyspark
?.py
文件吗? 顺便说一句,我也看了一下spark
代码,感到有点迷茫,我无法出于自己的目的复制它们的功能。
是的,尽管不是很琐碎,但它是可能的。通常,您需要一个Java(友好的)包装器,这样就不必处理Scala功能,而这些功能使用普通Java不能轻松表达,因此在Py4J网关中无法很好地发挥作用。
假设您的课程是int包com.example
,并DataFrame
调用了Pythondf
df = ... # Python DataFrame
您必须:
使用您最喜欢的构建工具来构建jar 。
将其包括在驱动程序类路径中,例如使用--driver-class-path
PySpark shell /的参数spark-submit
。根据确切的代码可能无法使用通过它--jars
以及
从PythonSparkContext
实例中提取JVM实例:
jvm = sc._jvm
SQLContext
从SQLContext
实例中提取Scala :
ssqlContext = sqlContext._ssql_ctx
DataFrame
从中提取Java df
:
jdf = df._jdf
创建的新实例SimpleClass
:
simpleObject = jvm.com.example.SimpleClass(ssqlContext, jdf, "v")
调用exe
方法并使用Python包装结果DataFrame
:
from pyspark.sql import DataFrame
DataFrame(simpleObject.exe(), ssqlContext)
结果应该是有效的PySpark DataFrame
。您当然可以将所有步骤组合到一个调用中。
重要提示 :仅当仅在驱动程序上执行Python代码时,此方法才可行。不能在Python操作或转换中使用。
我有一个简单的内部类变量,如何在scala中访问它?
问题内容: 我尝试了解如何使用“内部”包组织代码。让我展示一下我的结构: 在GOPATH树之外。无论我尝试从什么都不导入的任何路径都可行,唯一可行的情况是。我认为我做错了什么,或者总体上弄错了“内部”包装想法。任何人都可以让事情变得更清楚吗? 更新 上面的示例是正确的,我唯一需要的是将文件夹放在下。因此,如果我们仅从子树而不是从外部导入,则该导入路径是可行的。 问题答案: 包必须位于您的包中才能导
问题内容: 我试图更深入地了解Python的工作方式,并且一直在查看http://docs.python.org/3.3/reference/grammar.html上显示的语法。 我注意到它说您也必须更改parsermodule.c,但说实话,我只是不关注这里发生的事情。 我了解语法是如何阅读该语言的规范,但是…我什至不知道该写的是什么。它看起来几乎像Python,但实际上不是。 我希望更好地了
问题内容: Java中的以下代码可正确编译: 而Scala中的此代码不: Java代码清单到Scala的正确翻译(如果存在)是什么? 欢迎对语言设计进行理论解释。 问题答案: 内部类型仅针对特征的特定实例实现定义。由于scala具有 依赖于路径的 类型,因此的每个实例将具有自己的子特性。 如果您需要一个接口来实现客户端的一般行为,并且不依赖于特定实例,则应在
问题内容: 我正在使用Scala 2.8中的JSON类中的构建来解析JSON代码。由于最小化依赖性,我不想使用Liftweb或其他任何一种。 我这样做的方法似乎势在必行,是否有更好的方法可以做到? 问题答案: 这是一个基于提取器的解决方案,它将进行类转换: 在for循环的开始,我人为地将结果包装在一个列表中,以便在最后生成一个列表。然后在for循环的其余部分中,我将使用生成器(使用)和值定义(使用
我有一个pyspark数据帧(df1 ),它由10K行组成,数据帧看起来像- 另一个pyspark数据帧(df2)由100k记录组成,看起来像- 我想使用pyspark内连接,最终的数据帧看起来像- df2中mobile_no的长度是12,但df1中是10。我可以加入它,但这是昂贵的操作。使用pyspark有帮助吗?