class Spark::JavaBridge::Base
Constants
- JAVA_OBJECTS
- JAVA_TEST_OBJECTS
- RUBY_TO_JAVA_SKIP
Public Class Methods
new(target)
click to toggle source
# File lib/spark/java_bridge/base.rb, line 44 def initialize(target) @target = target end
Public Instance Methods
call(klass, method, *args)
click to toggle source
Call java object
# File lib/spark/java_bridge/base.rb, line 73 def call(klass, method, *args) # To java args.map!{|item| to_java(item)} # Call java result = klass.__send__(method, *args) # To ruby to_ruby(result) end
import_all()
click to toggle source
Import all important classes into Objects
# File lib/spark/java_bridge/base.rb, line 49 def import_all return if @imported java_objects.each do |name, klass| import(name, klass) end @imported = true nil end
import_all_test()
click to toggle source
Import classes for testing
# File lib/spark/java_bridge/base.rb, line 61 def import_all_test return if @imported_test java_test_objects.each do |name, klass| import(name, klass) end @imported_test = true nil end
to_java(object)
click to toggle source
# File lib/spark/java_bridge/base.rb, line 97 def to_java(object) if RUBY_TO_JAVA_SKIP.include?(object.class) # Some object are convert automatically # This is for preventing errors # For example: jruby store integer as long so 1.to_java is Long object elsif object.respond_to?(:to_java) object.to_java elsif object.is_a?(Array) to_java_array_list(object) else object end end
Also aliased as: ruby_to_java
to_java_array_list(array)
click to toggle source
# File lib/spark/java_bridge/base.rb, line 84 def to_java_array_list(array) array_list = ArrayList.new array.each do |item| array_list.add(to_java(item)) end array_list end
to_long(number)
click to toggle source
# File lib/spark/java_bridge/base.rb, line 92 def to_long(number) return nil if number.nil? JLong.new(number) end
to_ruby(object)
click to toggle source
Array problem:
Rjb: object.toArray -> Array Jruby: object.toArray -> java.lang.Object
# File lib/spark/java_bridge/base.rb, line 116 def to_ruby(object) if java_object?(object) class_name = object.getClass.getSimpleName case class_name when 'ArraySeq' result = [] iterator = object.iterator while iterator.hasNext result << to_ruby(iterator.next) end result when 'Map2', 'Map3', 'Map4', 'HashTrieMap' Hash[ object.toSeq.array.to_a.map!{|item| [item._1, item._2]} ] when 'SeqWrapper'; object.toArray.to_a.map!{|item| to_ruby(item)} when 'ofRef'; object.array.to_a.map!{|item| to_ruby(item)} # WrappedArray$ofRef when 'LabeledPoint'; Spark::Mllib::LabeledPoint.from_java(object) when 'DenseVector'; Spark::Mllib::DenseVector.from_java(object) when 'KMeansModel'; Spark::Mllib::KMeansModel.from_java(object) when 'DenseMatrix'; Spark::Mllib::DenseMatrix.from_java(object) else # Some RDD if class_name != 'JavaRDD' && class_name.end_with?('RDD') object = object.toJavaRDD class_name = 'JavaRDD' end # JavaRDD if class_name == 'JavaRDD' jrdd = RubyRDD.toRuby(object) serializer = Spark::Serializer.build { __batched__(__marshal__) } serializer = Spark::Serializer.build { __batched__(__marshal__, 2) } return Spark::RDD.new(jrdd, Spark.sc, serializer, deserializer) end # Unknow Spark.logger.warn("Java object '#{object.getClass.name}' was not converted.") object end else # Already transfered object end end
Also aliased as: java_to_ruby
Private Instance Methods
jars()
click to toggle source
# File lib/spark/java_bridge/base.rb, line 170 def jars result = Dir.glob(File.join(@target, '*.jar')) result.flatten! result end
java_objects()
click to toggle source
# File lib/spark/java_bridge/base.rb, line 189 def java_objects objects_with_names(JAVA_OBJECTS) end
java_test_objects()
click to toggle source
# File lib/spark/java_bridge/base.rb, line 193 def java_test_objects objects_with_names(JAVA_TEST_OBJECTS) end
objects_with_names(objects)
click to toggle source
# File lib/spark/java_bridge/base.rb, line 176 def objects_with_names(objects) hash = {} objects.each do |object| if object.is_a?(Hash) hash.merge!(object) else key = object.split('.').last.to_sym hash[key] = object end end hash end
raise_missing_class(klass)
click to toggle source
# File lib/spark/java_bridge/base.rb, line 197 def raise_missing_class(klass) raise Spark::JavaBridgeError, "Class #{klass} is missing. Make sure that Spark and RubySpark is assembled." end