PySpark:如何在JDBC连接中使用MySQL函数?

时间:2019-09-20 12:22:31

标签: pyspark pyspark-sql

我正在MySQL数据库中使用此查询

select *,
    UNIX_TIMESTAMP(CONVERT_TZ(
        SUBSTRING(input_date, 1, 19),
        SUBSTRING(input_date, 20),
        'SYSTEM'
    )) as timestamp
from my_table

用于将具有UTC偏移量的示例input_date时间戳(例如2018-12-15T13:48:16-08:00)转换为纪元时间。

我现在需要使用PySpark并通过JDBC连接访问该表来做同样的事情,但是当我尝试时会出现以下错误

Py4JJavaError: An error occurred while calling o62.sql.
: org.apache.spark.sql.AnalysisException: Undefined function: 'CONVERT_TZ'. This function is neither a registered temporary function nor a permanent function registered in the database ...

我在做什么错?在PySpark中有更好的方法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用此功能连接到MySQL数据库:

def connect_to_sql(
    spark, jdbc_hostname, jdbc_port, database, data_table, username, password
):
    jdbc_url = "jdbc:mysql://{0}:{1}/{2}".format(jdbc_hostname, jdbc_port, database)

    connection_details = {
        "user": username,
        "password": password,
        "driver": "com.mysql.cj.jdbc.Driver",
    }

    df = spark.read.jdbc(url=jdbc_url, table=data_table, properties=connection_details)
    return df

关于时区转换,此问题将为您提供帮助:

How to convert a Date String from UTC to Specific TimeZone in HIVE?