[英]How to get element by Index in Spark RDD (Java) not scala, python
[英]Spark RDD - Scala write and Python read
我有一个简单的Spark Scala脚本,该脚本读取一堆日志文件并返回RDD[Map[String, String]]
我正在努力将Scala RDD导出到pyspark用户。
首先尝试使用Jackson编写json文件。
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val rec = sc.textFile("/path/to/log/file.log").
[ omissis ]
rec.map(f => mapper.writeValueAsString(f))
rec.saveAsTextFile("/path/to/export.json");
但是当我们尝试在pyspark中读取json时
spark.read.json("/path/to/export.json").take(5)
引发异常
org.apache.spark.sql.AnalysisException: Reference '11E' is ambiguous, could be: 11E#20457, 11E#20458.;
at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolve(LogicalPlan.scala:264)
是否有最佳实践在Scala中实现Scala和Python之间的互操作性?
在Scala中保存RDD并在Python中重用它的更有效的方法是什么?
pyspark用户很可能会在他这一边提交sql查询,这是导出我的工作结果的好方法吗?
也许可以帮到您。
有一个要点 ,使您可以通过pyspark调用Scala代码。 那是一家生产卡夫卡啤酒的人。
查看scala代码示例:
import org.apache.spark.api.java.JavaRDD
import org.apache.spark.api.python.SerDeUtil
def fooScala(): JavaRDD[Array[Byte]] = {
rdd = sc.parallelize(1 to 10)
SerDeUtil.javaToPython(rdd)
}
之后,您需要编译代码并生成项目的jar。
比在pySpark中,您可以这样调用类:
from pyspark.rdd import RDD
_jvm = sc._jvm
python_rdd = _jvm.yourClassPath.fooScala()
此过程可以帮助您完成所需的工作。
要调用pyspark内的jar,必须通过spark-submit调用,如下所示:
spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.