我正在添加sparksql的外部数据源,我的数据源是一种文件格式。我扩展了FileFormat特性并实现了prepareWrite方法来创建我自己的OutputWriterFactory和OutputWriter。
当我在火花局部模式下测试时,效果很好。
但是当我尝试写下spark-shell
时scala> df.write.format("cn.edu.thu.tsfile").save("/tsfile/out5")
我有一个NPE。
java.lang.NullPointerException
at org.apache.spark.sql.execution.datasources.BaseWriterContainer.newOutputWriter(WriterContainer.scala:131)
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer.writeRows(WriterContainer.scala:247)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(InsertIntoHadoopFsRelationCommand.scala:143)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(InsertIntoHadoopFsRelationCommand.scala:143)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
at org.apache.spark.scheduler.Task.run(Task.scala:86)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
这是我的存储库 https://github.com/qiaojialin/tsfile-spark-connector
看起来spark根本不会调用prepareWrite方法。
以前有人见过这个吗?感谢。
答案 0 :(得分:0)
我知道我在火花集群中有两个罐子。一个是/ spark / jars,另一个是--jars添加。我删除了/spark/jars/connector.jar,一切正常。