我试图在eclipse中使用Scala Spark从MySQL数据库中获取数据。问题在于,代码花了几个小时才能执行一个SQL查询。这是我的初始代码:
val conf = new SparkConf().setAppName("MyApp").setMaster("local")
val sc = new SparkContext(conf)
val sqlcontext = new org.apache.spark.sql.SQLContext(sc)
sqlcontext.setConf("url", "mysql://localhost:3306/myDB?user=us&password=pw")
val action = sqlcontext.jdbc(jdbcUrl, "action").registerTempTable("action")
val session = sqlcontext.jdbc(jdbcUrl, "session").registerTempTable("session")
sqlcontext.cacheTable("action")
sqlcontext.cacheTable("session")
然后,为了从数据库获取数据,我尝试了许多命令
val data = sqlcontext.sql('SELECT * FROM action INNER JOIN session ON action.session_id = session.session_id")
这需要很多小时才能完成,所以我尝试了Juste来获取桌子:
val df = sqlcontext.table("action").collect()
println(df.size)
但这并不能解决我的问题。最后只想说我的动作表包含大约1100万行。
有什么想法?
这是长期运行的多种原因。如您提到的,您的主是"本地",您正在单个执行程序线程上运行。当Spark分配得很好时,Spark会做得更好。请检查在您的情况下创建了多少个分区。如果是一个,请使用retartition(numberOfpartition:int)进行重新分配,并使用更多线程运行以实现并行处理(local [8]/local [*])。