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

PySpark:如何在JDBC连接中使用MySQL函数?,pyspark,pyspark-sql,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偏移量为2018-12-15T13:48:16-08:00的样本输入日期时间戳转换为历元时间 现在,我需要使用PySpa

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

select *,
    UNIX_TIMESTAMP(CONVERT_TZ(
        SUBSTRING(input_date, 1, 19),
        SUBSTRING(input_date, 20),
        'SYSTEM'
    )) as timestamp
from my_table
用于将UTC偏移量为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中有更好的方法吗


谢谢

您可以使用此功能连接到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
关于时区转换,此问题将帮助您:


谢谢pissal,这就是我正在使用的,但是我的问题与使用函数CONVERT_TZ有关,它显然在Hive中不可用,因此我得到了上面的错误。所以我的问题是如何避免这种情况。