복붙노트

[SCALA] 데이터베이스를 사용하여 JDBC에 스파크 데이터 집합을 쓸 수 없음

SCALA

데이터베이스를 사용하여 JDBC에 스파크 데이터 집합을 쓸 수 없음

나는 오라클 데이터베이스 테이블에 내 스파크 데이터 세트를 작성해야합니다. 나는 추가 모드와 데이터 세트 쓰기 방법을 사용하고 있습니다. 그러나 분석 예외를 받고, 스파크 작업을 사용하여 클러스터에서 트리거되었을 때 명령을 spark2을 제출.

나는, JSON 파일을 읽을 수 abcDataset 같은 데이터 세트로 및 세트를 평평하게했다.

버전 스파크 - 2 오라클 데이터베이스 JDBC 드라이버 - oracle.jdbc.driver.OracleDriver 자바 - 언어 프로그래밍

Dataset<Row> abcDataset= dataframe.select(col('abc').....{and other columns};


Properties dbProperties = new Properties();
            InputStream is = SparkReader.class.getClassLoader().getResourceAsStream("dbProperties.yaml");
            dbProperties.load(is);
            String jdbcUrl = dbProperties.getProperty("jdbcUrl");
            dbProperties.put("driver","oracle.jdbc.driver.OracleDriver");
            String where = "USER123.PERSON";
            abcDataset.write().format("org.apache.spark.sql.execution.datasources.jdbc.DefaultSource").option("driver", "oracle.jdbc.driver.OracleDriver").mode("append").jdbc(jdbcUrl, where, dbProperties);

예상 - 데이터베이스에 쓰기하지만 아래의 오류를 얻기에 -

org.apache.spark.sql.AnalysisException: Multiple sources found for jdbc (org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider, org.apache.spark.sql.execution.datasources.jdbc.DefaultSource), please specify the fully qualified class name.;
    at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:670) 

내가 클러스터에서이 작업을 실행하고, 또는 단계가없는 것처럼 우리는 스파크의 추가 속성이 명령을 제출 설정해야합니까?

해결법

  1. ==============================

    1.당신은 당신이 RDBMS에 스파크에서를 통해 JDBC를 작성할 때 abcDataset.write.jdbc 또는 abcDataset.write.format ( "JDBC") 중 하나를 사용해야합니다.

    당신은 당신이 RDBMS에 스파크에서를 통해 JDBC를 작성할 때 abcDataset.write.jdbc 또는 abcDataset.write.format ( "JDBC") 중 하나를 사용해야합니다.

  2. from https://stackoverflow.com/questions/56151363/not-able-to-write-spark-dataset-to-database-using-jdbc by cc-by-sa and MIT license