scala在idea中本地运行遇到问题:
17/10/12 17:09:43 INFO storage.DiskBlockManager: Created local directory at /private/var/folders/bv/0tp4dw1n5tl9cxpc6dg2jy180000gp/T/blockmgr-0b0bf3cf-dd77-4bb4-97dc-60d6a65a35ae
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.spark.storage.DiskBlockManager.addShutdownHook(DiskBlockManager.scala:147)
at org.apache.spark.storage.DiskBlockManager.(DiskBlockManager.scala:54)
at org.apache.spark.storage.BlockManager.(BlockManager.scala:78)
at org.apache.spark.SparkEnv$.create(SparkEnv.scala:365)
at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:193)
at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:288)
at org.apache.spark.SparkContext.(SparkContext.scala:457)
at com.didichuxing.scala.BenchMarkMain$.main(BenchMarkMain.scala:21)
at com.didichuxing.scala.BenchMarkMain.main(BenchMarkMain.scala)
Caused by: java.lang.NoSuchFieldException: SHUTDOWN_HOOK_PRIORITY
at java.lang.Class.getField(Class.java:1695)
at org.apache.spark.util.SparkShutdownHookManager.install(ShutdownHookManager.scala:223)
at org.apache.spark.util.ShutdownHookManager$.shutdownHooks$lzycompute(ShutdownHookManager.scala:50)
at org.apache.spark.util.ShutdownHookManager$.shutdownHooks(ShutdownHookManager.scala:48)
at org.apache.spark.util.ShutdownHookManager$.addShutdownHook(ShutdownHookManager.scala:191)
at org.apache.spark.util.ShutdownHookManager$.(ShutdownHookManager.scala:58)
at org.apache.spark.util.ShutdownHookManager$.(ShutdownHookManager.scala)
... 9 more
查看这个帖子:
https://forums.databricks.com/questions/2227/shutdown-hook-priority-javalangnosuchfieldexceptio.html
貌似说的是运行在老版本的spark上
我的本地并没有安装spark,是否是这个原因?
看了这个帖子,感觉确实是这个问题。需要指定跑的spark,可以是远端的,也可以是local的。
export SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=7777
但是我本地和开发机器上没有spark,所以就不能本地调试了,需要在服务上使用spark-shell进行手动调试。
=================================
最快的进行调试和开发spark的方法是什么?
现在线上有一个spark集群,只能通过线上机器上的spark客户端进行连接,最快的方法应该是在spark客户端机器上进行开发,然后mvn打包,然后使用spark-submit,在local下面,这个应该是最快的方法了。
根据文章:http://blog.csdn.net/lovehuangjiaju/article/details/49227919
要想搭建spark远程调试方法,需要先把jar包提交到spark客户端机器,然后使用submit开启一个端口,然后idea上连接远端,这个也是很麻烦的。
可能最方便的方法就是在客户端机器上开发了。可惜这样的话idea就有点鸡肋了。
这篇文章:http://www.eurekao.com/post/build-spark-environment-for-windows-base-on-docker.html
貌似可以本地搭建一个docker,然后在本地通过setJars的方法来进行直接调试。
这个以后再尝试。。。TODO
====================
如何通过rdd来进行合并?
使用到了rdd的union算子。不过今天遇到的问题是需要一个初始化的rdd。所以就使用到emptyRDD,但是这个是个范型的类型,需要初始化的时候定义下范型。
var rdd = sc.emptyRDD[FlowInfo]
========================
mvn中-DskipTests和-Dmaven.test.skip=true的区别?
主要区别在于是否编译测试用例类。
http://zephiruswt.blog.51cto.com/5193151/1302770
========================
如何使用spark-sql获取分位数字
可以使用spark-sql的方法:
val df = sqlContext.sql("select flowId, percentile_approx(duration, 0.95) as approxQuantile from flowInfos group by flowId")
这里使用到的percentile_approx可能不是所有spark-sql都支持,至少我尝试在spark-1.6版本下是不支持的。(错误)
org.apache.spark.sql.AnalysisException: undefined function percentile_approx
还以为是1.6不支持,原来是我的sqlContext不是创建的HiveContext,一些hive-sql的语法就不能使用
https://stackoverflow.com/questions/36171349/using-windowing-functions-in-spark/36172311#36172311
修改过来就可以了
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
========================
打的log没有打印在页面上?使用logInfo没有打印任何东西?
========================
EmptyRDD怎么使用和RDD进行join?
var rdd: org.apache.spark.rdd.RDD[FlowInfo] = sc.emptyRDD[FlowInfo]
...
rdd = rdd union trdd