小编Dic*_*hen的帖子

如何在jdbc数据源中使用子查询来获取dbtable选项?

我想使用Spark来处理来自JDBC源的一些数据.但首先,我想在JDBC端运行一些查询来过滤列和连接表,而不是从JDBC读取原始表,而是将查询结果作为表加载到Spark SQL中.

加载原始JDBC表的以下语法适用于我:

df_table1 = sqlContext.read.format('jdbc').options(
    url="jdbc:mysql://foo.com:3306",
    dbtable="mydb.table1",
    user="me",
    password="******",
    driver="com.mysql.jdbc.Driver" # mysql JDBC driver 5.1.41
).load() 
df_table1.show() # succeeded
Run Code Online (Sandbox Code Playgroud)

根据Spark 文档(我正在使用PySpark 1.6.3):

dbtable:应该读取的JDBC表.请注意,可以使用在SQL查询的FROM子句中有效的任何内容.例如,您也可以在括号中使用子查询,而不是完整的表.

所以只是为了实验,我尝试了这样简单的事情:

df_table1 = sqlContext.read.format('jdbc').options(
    url="jdbc:mysql://foo.com:3306",
    dbtable="(SELECT * FROM mydb.table1) AS table1",
    user="me",
    password="******",
    driver="com.mysql.jdbc.Driver"
).load() # failed
Run Code Online (Sandbox Code Playgroud)

它引发了以下异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table1 WHERE 1=0' at line 1
Run Code Online (Sandbox Code Playgroud)

我还尝试了一些语法的其他变体(添加/删除括号,删除'as'子句,切换案例等),没有任何运气.那么正确的语法是什么?我在哪里可以找到更详细的语法文档?此外,错误信息中这个奇怪的"WHERE 1 = 0"来自何处?谢谢!

mysql jdbc apache-spark apache-spark-sql pyspark-sql

8
推荐指数
1
解决办法
5464
查看次数

Cassandra 集群中许多小节点与更少的大节点

我想知道具有一些大型强大节点的 Cassandra 集群与具有许多小型节点的集群之间有什么区别。例如,如果我选择在 AWS EC2 上运行 Cassandra,选择 1 个 m4.4xlarge 节点、2 个 m4.2xlarge 节点、4 个 m4.xlarge 或 8 个 m4.large 会有什么区别?根据https://aws.amazon.com/ec2/pricing/ ,它们应该具有相同的计算能力。但现实中他们对于Cassandra会有不同的表现吗?假设我们始终将复制因子设置为 1,这样比较是公平的。

amazon-ec2 cassandra

6
推荐指数
1
解决办法
726
查看次数