使用 PySpark 从 MariaDB 读取查询 [重复]

Posted

技术标签:

【中文标题】使用 PySpark 从 MariaDB 读取查询 [重复]【英文标题】:Read Query from MariaDB using PySpark [duplicate] 【发布时间】:2020-01-28 01:03:18 【问题描述】:

我正在尝试从 MariaDB 读取查询结果到 pyspark 数据帧。 我用过的罐子是

--jars mariadb-java-client-2.2.2.jar

我可以使用

读取表格
df = spark.read.format("jdbc")\
        .option("url","jdbc:mariadb://xxx.xxx.xx.xx:xxxx/hdpms")\
        .option("driver", "org.mariadb.jdbc.Driver")\
        .option("dbtable", Mytable)\
        .option("user", "xxxxx_xxxxx")\
        .option("password", "xxxxx")\
        .load()

现在我正在寻找一个命令来运行一个简单的查询,例如

SELECT col1,col2,col3,.. From MyTable Where date>2019 and cond2;

虽然我可以使用将查询作为来运行它

"MyTable date>2019 and cond2 --"

as jar 在开头添加SELECT * FROM,在末尾添加where 1=0 但我面临以下错误

    py4j.protocol.Py4JJavaError: An error occurred while calling o455.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 3.0 failed 4 times, most recent failure: Lost task 0.3 in stage 3.0 (TID 12, xhadoopm3095p.aetna.com, executor 2): java.sql.SQLException: Value "DATE_CREATED" cannot be parse as Timestamp
        at org.mariadb.jdbc.internal.com.read.resultset.rowprotocol.TextRowProtocol.getInternalTimestamp(TextRowProtocol.java:592)
        at org.mariadb.jdbc.internal.com.read.resultset.SelectResultSet.getTimestamp(SelectResultSet.java:1178)
        at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$makeGetter$11.apply(JdbcUtils.scala:439)
        at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$makeGetter$11.apply(JdbcUtils.scala:438)

谁能帮我解决这个问题。 谢谢

【问题讨论】:

这能回答你的问题吗? In Apache Spark 2.0.0, is it possible to fetch a query from an external database (rather than grab the whole table)? 【参考方案1】:
df = spark.read.format("jdbc")\
        .option("url","jdbc:mariadb://xxx.xxx.xx.xx:xxxx/hdpms")\
        .option("driver", "org.mariadb.jdbc.Driver")\
        .option("dbtable", "(SELECT col1,col2,col3,.. From MyTable Where date>2019 and cond2) tmp")\
        .option("user", "xxxxx_xxxxx")\
        .option("password", "xxxxx")\
        .load()

使用查询为表创建别名,它将起作用

【讨论】:

以上是关于使用 PySpark 从 MariaDB 读取查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

pyspark 与 MariaDB 的连接失败并出现 ClassNotFoundException

在 pyspark 中加载 SQL 查询?

Pyspark:从路径读取多个 JSON 文件

无法使用 PySpark 从 Elasticsearch 读取

无法使用本地 PySpark 从 S3 读取 json 文件

使用 pyspark 从 s3 位置读取镶木地板文件的文件夹到 pyspark 数据帧