MongoDB + Spark в Java-проекте.Не могу использовать набор данных <Row> - PullRequest
0 голосов
/ 01 октября 2018

Я занимаюсь разработкой проекта с использованием Mongo и Spark на Java.В этом приложении, где я работаю, я просто хочу прочитать данные из базы данных в Монго и сохранить их в наборе данных для работы с ним.

Но у меня возникают некоторые проблемы, потому что я не могу использовать набор данных, где я могу попытаться сохранитьинформация.

Это мой код:

import java.util.logging.Level;

import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.SparkSession;
import org.bson.Document;
import com.mongodb.spark.MongoSpark;
import com.mongodb.spark.rdd.api.java.JavaMongoRDD;

public class MongoSparkTFG {

    public void mongoSparkExe() {

    SparkSession spark = SparkSession.builder().master("local").appName("MongoSparkConnector")
            .config("spark.mongodb.input.uri", "mongodb://127.0.0.1/Nasa.satelites")
            .config("spark.mongodb.output.uri", "mongodb://127.0.0.1/Nasa.satelites").getOrCreate();
    spark.sparkContext().setLogLevel("ERROR");

    // Create a JavaSparkContext using the SparkSession's SparkContext object
    JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());
    System.out.println("Comienzo el proceso de ejemplo");

    /* Start Example: Read data from MongoDB ************************/

    Dataset<Row> implicitDS = MongoSpark.load(jsc).toDF();
    implicitDS.printSchema();
    implicitDS.createOrReplaceTempView("Sats");
    Dataset<Row> centenarians = spark.sql("SELECT Tiempo FROM Sats WHERE latitud > 9");
    centenarians.show();

    /* End Example **************************************************/

    jsc.close();

}

public static void main(String[] args) {
    MongoSparkTFG xd = new MongoSparkTFG();
    xd.mongoSparkExe();
}

}

А это мои зависимости в моем pom.xml:

<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.11 -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.3.2</version>
    </dependency>

    <!-- <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-mllib_2.11</artifactId> 
        <version>2.0.0</version> </dependency> -->

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-mllib_2.11</artifactId>
        <version>2.3.2</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.8.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.directory.server</groupId>
        <artifactId>kerberos-client</artifactId>
        <version>2.0.0-M16</version>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-yarn-server-web-proxy</artifactId>
        <version>3.1.1</version>
    </dependency>


    <dependency>
        <groupId>org.mongodb.spark</groupId>
        <artifactId>mongo-spark-connector_2.11</artifactId>
        <version>2.3.0</version>
    </dependency>

</dependencies>

Это то, что у меня есть:

 |-- Num: integer (nullable = true)
 |-- Tiempo: string (nullable = true)
 |-- _id: struct (nullable = true)
 |    |-- oid: string (nullable = true)
 |-- latitud: double (nullable = true)
 |-- longitud: double (nullable = true)
 |-- wind_Speed: double (nullable = true)
 |-- wind_dir: double (nullable = true)

Первая ошибка, которая у меня возникает, когда я пытаюсь показать набор данных:

   2018-10-01 04:18:44,863 ERROR [Executor task launch worker for task 1] executor.Executor (Logging.scala:logError(91)) - Exception in task 0.0 in stage 1.0 (TID 1)
java.lang.NoSuchFieldError: DECIMAL128

И когда я делаю createOrReplaceTempView этого набора данных ия делаю выбор над этим TempView я получаю эту ошибку:

 2018-10-01 04:22:49,978 ERROR [main] rdd.MongoRDD (Logging.scala:logError(70)) - 
-----------------------------
WARNING: Partitioning failed.
-----------------------------

Partitioning using the 'DefaultMongoPartitioner$' failed.

Please check the stacktrace to determine the cause of the failure or check the Partitioner API documentation.
Note: Not all partitioners are suitable for all toplogies and not all partitioners support views.%n

Что я делаю не так?

Спасибо за вашу помощь.С уважением.

...