Spark 2.0 - 数据集<row>用Java写入Parquet

时间:2017-06-15 07:00:39

标签: apache-spark spark-dataframe

我想将数据集写入 Java 中的Parquet文件中,我使用

Dataset<Row> ds = getDataFrame();
ds.write().parquet("data.parquet");

此代码由spark-submit命令运行,如下所示

sudo spark-submit --class getdata --master yarn --num-executors 4 --executor-cores 1 --jars guava-14.0.1.jar,hadoop-common-2.7.3.jar,hbase-client-1.3.0.jar,hbase-common-1.3.0.jar,hbase-protocol-1.3.0.jar,log4j-1.2.17.jar,metrics-core-2.2.0.jar,ojdbc6.jar,spark-core_2.11-2.0.2.jar,spark-assembly.jar,spark-sql_2.11-2.0.2.jar,hive-beeline-1.2.1.spark2.jar,hive-cli-1.2.1.spark2.jar,hive-exec-1.2.1.spark2.jar,hive-jdbc-1.2.1.spark2.jar,hive-metastore-1.2.1.spark2.jar,parquet-column-1.7.0.jar,parquet-common-1.7.0.jar,parquet-encoding-1.7.0.jar,parquet-format-2.3.0-incubating.jar,parquet-generator-1.7.0.jar,parquet-hadoop-1.7.0.jar,parquet-hadoop-bundle-1.6.0.jar,parquet-hive-1.0.1.jar,parquet-jackson-1.7.0.jar,spark-hive_2.11-2.0.2.jar getdata.jar

我收到以下异常。

Exception in thread "main" java.util.ServiceConfigurationError: org.apache.spark.sql.sources.DataSourceRegister: Provider org.apache.spark.sql.hive.orc.DefaultSource could not be instantiated

我错过了什么?请帮忙。

1 个答案:

答案 0 :(得分:0)

ServiceLoader发现类路径上的DefaultSource实现调用一个构造函数,该构造函数返回的类型与预期的返回类型不对应。

在需要HadoopFsRelation的地方返回OrcRelation,但OrcRelation没有实现HadoopFsRelation。这可能是版本冲突,因为我无法在2.1.0中找到HadoopFsRelation,而在旧版本中(例如1.6.0)。

您的类路径上有多个Spark版本,还是混合的Spark / Hive实现?

相关问题