回答

收藏

使用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。第二,第三和第四个参数是必需的,分别用于上下限和分区数。换句话说,该源数据需要很长一段时间才能进行分区才能正常工作。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则