Skip to content

Instantly share code, notes, and snippets.

@mboes
Last active April 6, 2017 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mboes/1f31da7e1859371ce5ab74b51397c492 to your computer and use it in GitHub Desktop.
Save mboes/1f31da7e1859371ce5ab74b51397c492 to your computer and use it in GitHub Desktop.
Spark Scala API PoC
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StaticPointers #-}
{-# LANGUAGE TypeOperators #-}
module Main where
import Control.Monad (forM_)
import Control.Distributed.Closure
import Control.Distributed.Spark (getOrCreateSparkContext, newSparkConf, parallelize)
import Data.Int
import qualified Foreign.JNI as JNI
import Language.Java
import Language.Java.Inline
import Criterion.Main as Criterion
import System.IO.Unsafe (unsafePerformIO)
sincr :: J ('Iface "scala.Function1")
sincr = unsafePerformIO $
[java| new scala.runtime.AbstractFunction1<Integer, Integer>() {
public Integer apply(Integer x) {
return x + 1;
}
} |]
zipAndCountScala :: RDD Int32 -> IO Int32
zipAndCountScala rdd = do
klass <- JNI.findClass "java/lang/Integer"
tag :: J ('Class "scala.reflect.ClassTag") <- [java| scala.reflect.ClassTag$.MODULE$.apply($klass) |]
let rdd1 = rdd
reify =<< [java| { return $rdd.zip($rdd1, $tag).count(); } |]
newtype RDD a = RDD (J ('Class "org.apache.spark.rdd.RDD"))
instance Coercible (RDD a) ('Class "org.apache.spark.rdd.RDD")
main :: IO ()
main = do
conf <- newSparkConf "RDD benchmarks"
sc <- getOrCreateSparkContext conf
forM_ [0,200..10000] $ \x -> do
putStrLn $ "Size " ++ show x
rdd <- parallelize sc (replicate x (1 :: Int32))
rdd' <-
callStatic
(sing :: Sing "org.apache.spark.api.java.JavaRDD")
"toRDD"
[jvalue rdd]
print =<< zipAndCountScala rdd'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment