使用Spark SQL从SQL Server读取数据
技术问答
515 人阅读
|
0 人回复
|
2023-09-14
|
是否可以将数据从Microsoft Sql, `6 g9 m7 B7 G: J) ^: ^
Server(以及oracle,mysql等)读取到Spark应用程序中的rdd中?还是我们需要创建一个内存中的集合并将其并行化为RDD?
2 z5 N( i( j& m( s
' g F' x0 H0 N) b$ J: q解决方案:
( h4 z! L8 L% g1 O( e1 N
6 }; G- {: }5 s7 n; x
" K" c% I; I6 u. t& j" i% R5 O" [& H A$ V* ^& s( H$ ]2 |% G
从邮件列表中找到了解决方案。可以使用JdbcRDD完成此操作。我需要获取MS Sql Server
, b2 |8 R: q V0 LJDBC驱动程序jar并将其添加到项目的lib中。我想使用集成安全性,因此需要将sqljdbc_auth.dll(在同一下载中提供)放在java.library.path可以看到的位置。然后,代码如下所示:( o5 T w' }, N4 b
val rdd = new JdbcRDD[Email](sc,
% }6 R* m' f/ J5 o4 x+ F. e' i () => {DriverManager.getConnection(
/ v0 w9 V+ s% `* o/ n. D0 w! ` "jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;")},
: Z" P1 {% j. q O4 X% t "SELECT * FROM TABLE_NAME Where ? { SomeClass(r.getString("Col1"),
/ c' {) b; S* b, p+ y% ` r.getString("Col2"), r.getString("Col3")) } )2 ~' D; {* d# U0 z- t: \
这给出了SomeClass的Rdd。第二,第三和第四个参数是必需的,分别用于上下限和分区数。换句话说,该源数据需要很长一段时间才能进行分区才能正常工作。 |
|
|
|
|
|