无标题文章

最近失业在家,搞点好玩的,于是看看能不能给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了

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

并没有,只是为了好玩

你可能感兴趣的:(无标题文章)