Microsoft SQL Server (및 oracle, mysql 등)의 데이터를 Spark 응용 프로그램의 rdd로 읽을 수 있습니까? 또는 메모리 세트를 만들고이를 RDD에 parallize해야합니까?Spark SQL을 사용하여 SQL Server에서 데이터 읽기
답변
메일 링리스트에서 해결책을 찾았습니다. JdbcRDD를 사용하여이를 수행 할 수 있습니다. MS Sql Server JDBC 드라이버 jar를 가져와 내 프로젝트의 lib에 추가해야했습니다. 통합 보안을 사용하기를 원했고 java.library.path가 볼 수있는 위치에 sqljdbc_auth.dll (동일한 다운로드에서 사용 가능)을 배치해야했습니다. 다음에, 코드는 다음과 같다 :
val rdd = new JdbcRDD[Email](sc,
() => {DriverManager.getConnection(
"jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;")},
"SELECT * FROM TABLE_NAME Where ? < X and X < ?",
1, 100000, 1000,
(r:ResultSet) => { SomeClass(r.getString("Col1"),
r.getString("Col2"), r.getString("Col3")) })
이것은 필요 SomeClass.The 두 번째, 세 번째 및 네 번째의 파라미터를 제공하고 RDD 상한 및 하한에 대한 것이고 파티션의 수. 다시 말해, 소스 데이터는이를 작동시키기 위해 long으로 파티션 할 수 있어야합니다. 당신은 지금 당신에게 대신 RDD 행의 객체의 DataFrame을 줄 것이다 sqlContext.read.jdbc
을 사용할 수 있습니다 1.4.0+ 스파크에서
.
위에 게시 된 솔루션에 상응하는
sqlContext.read.jdbc("jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;", "TABLE_NAME", "id", 1, 100000, 1000, new java.util.Properties)
이 테이블의 스키마를 선택해야하지만, 당신이 그것을 강제하려는 경우, 당신은 후 스키마 방법을 사용할 수 있습니다 읽기 sqlContext.read.schema(...insert schema here...).jdbc(...rest of the things...)
여기서 SomeClass의 RDD를 얻지는 않습니다 (내보기에는 더 좋음). 대신 관련 필드의 DataFrame을 가져옵니다.
자세한 내용은 여기에서 찾을 수 있습니다 : http://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases
- 1. SQL Server에서 트랜잭션의 데이터 읽기 비용
- 2. SQL Server에서 읽기 - CSV에서 읽어야합니다.
- 3. Spark Streaming에서 Hbase 데이터 읽기
- 4. OleDbDataReader를 사용하여 SQL Server에서 XML 읽기
- 5. Spark Sql을 사용하여 재귀 쿼리를 수행하는 방법
- 6. Spark SQL을 사용하여 현재 날짜 확인
- 7. Spark SQL을 통한 대량 데이터 마이그레이션
- 8. SQL Server에서 읽기 전용보기 만들기
- 9. Java에서 Apache Spark SQL을 사용하여 SQL 쿼리를 직접 실행
- 10. Spark SQL을 사용하여 정적 하이브 파티션에 데이터 삽입
- 11. SQL Server에서 데이터 스크럽
- 12. 동적 쿼리를 사용하여 SQL Server에서 sql을 실행하는 방법
- 13. Linq-SQL을 사용하여 SQL Server에서 테이블의 목록에 개체를 삽입하는 방법
- 14. Excel Transact SQL을 사용하여 SQL Server에서 데이터를 가져 오는 방법
- 15. SQL Server에서 NoSQL으로 데이터 이동
- 16. spark sql 데이터 프레임으로 기능 삭제
- 17. SSIS를 사용하여 SQL Server에서 Firebird로 데이터 전송
- 18. LINQ를 사용하여 SQL Server에서 데이터 가져 오기
- 19. 트리거를 사용하여 SQL Server에서 MySql으로 데이터 삽입
- 20. spark-sql을 사용하여 임시 테이블 캐싱
- 21. SQL Server에서 C#으로 VARBINARY (MAX) 읽기
- 22. SQL Server에서 Oracle으로 데이터 마이그레이션
- 23. Spark SQL Thrift Server에서 캐시 된 데이터의 파티션 수 지정
- 24. 큰 데이터 읽기 C#을 사용하는 SQL Server에서
- 25. SQL Server에서 대기하지 않고 커밋 된 데이터 읽기
- 26. 여러 SQL Server에서 데이터 수집
- 27. SQL Server에서 int 값 읽기 및 증가
- 28. 네임 스페이스가있는 SQL Server에서 Xml 읽기
- 29. Spark Sql JDBC 지원
- 30. spark sql을 사용하여 특정 집계에 대한 행을 필터링하는 방법은 무엇입니까?
이 거 확실히 답이 될 수있다 : P – khandelwaldeval
그렇게 보인다 ... 어떤 이유 왜? 모든 것에서 데이터를 가져올 수 있다면 가장 일반적인 상점이 아닌 이유는 무엇입니까? – ashic
태그'apache-spark'는 매우 엄숙하게 사용되므로 며칠을 기다려야합니다. 아파치 친구들이 귀하의 질문에 답변 할 수 있도록 며칠 정도 기다려주십시오. – khandelwaldeval