无标题文章

最近失业在家,搞点好玩的,于是看看能不能给apache spark做个ruby的api, 毕竟python都有了,ruby应该也能做,何况还有JRuby.

因为用spark-sql比较多,就先试试spark-sql这个模块

一开始想走捷径,直接在jruby里面java_import Spark的类,发现不行,报错。

还是先研究了一下python api是怎么做的:

看了几天代码,发现是用py4j这个模块做的,仔细研究了一下,发现是用p4yj的javagatewayServer在Java这边开了个server,然后python

那边通过socket 来传递消息,这样暴露了一些spark的内部类和对象给python这边调用。

于是打算实现一下 py4j的机制,只要我用ruby 给 py4j的GatewayServer发消息就好啦。

然而还是懒

于是刚才去面试完回来想着没准我自己实现一个java 类,把 spark的方法包起来就能调用了,于是赶紧实验了下:

这是java的类

importorg.apache.spark.sql.DataFrameReader;

importorg.apache.spark.sql.SparkSession;

public classProof {

publicSparkSession Initial(String[] args) {

SparkSession spark = SparkSession.builder().master("local[*]").getOrCreate();

returnspark;

}

publicDataFrameReader reader(SparkSession spark) {

DataFrameReader reader = spark.read();

returnreader;

};

;

}

这是ruby 调用的代码

```ruby

require 'java'

require './jruby_spark_bridge_jar/jruby-spark-bridge.jar'

java_import 'Proof'

a = Proof.new

puts spark = a.Initial([])

puts spark.methods.sort

df = spark.sql("select 1")

```

好像这样就暴露出来sparksession上的一些方法,我试了下是可以读取一个csv文件返回一个dataset对象的。

貌似这样就可以在jruby里面写spark了

啥,你问我有啥实际意义?

并没有,只是为了好玩

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容