【问题标题】:Spark 2.0 - Dataset<Row> Write to Parquet in JavaSpark 2.0 - Dataset<Row> 在 Java 中写入 Parquet
【发布时间】:2017-11-17 13:10:28
【问题描述】:

我想用 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

我错过了什么?请帮忙。

【问题讨论】:

    标签: apache-spark spark-dataframe


    【解决方案1】:

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

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

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

    【讨论】:

    • 我只使用 spark 2.0.2。我需要在 spark-submit 命令中包含哪个 jar 文件才能使其工作?
    猜你喜欢
    • 2020-05-11
    • 2020-10-21
    • 1970-01-01
    • 2018-10-27
    • 2017-02-04
    • 2018-10-01
    • 2021-04-12
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多