pyspark-pyspark.sql.dataframereader.jdbc()不接受文档中所说的datetime类型上限参数

wwtsj6pe  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(390)

我在文档中找到了jdbc函数 PySpark 3.0.1 在https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.dataframereader,上面写着:
column–将用于分区的数字、日期或时间戳类型的列的名称。
我认为它接受datetime列来划分查询。
所以我试了这个 EMR-6.2.0 (pyspark 3.0.1版):

sql_conn_params = get_spark_conn_params()  # my function
sql_conn_params['column'] ='EVENT_CAPTURED'
sql_conn_params['numPartitions'] = 8

# sql_conn_params['upperBound'] = datetime.strptime('2016-01-01', '%Y-%m-%d') # another trial

# sql_conn_params['lowerBound'] = datetime.strptime(''2016-01-10', '%Y-%m-%d')

sql_conn_params['upperBound'] = '2016-01-01 00:00:00'
sql_conn_params['lowerBound'] = '2016-01-10 00:00:00'
df = (spark.read.jdbc(
    table=tablize(sql),
  **sql_conn_params
))
df.show()

我有个错误:

invalid literal for int() with base 10: '2016-01-01 00:00:00'
Traceback (most recent call last):
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/readwriter.py", line 625, in jdbc
    return self._df(self._jreader.jdbc(url, table, column, int(lowerBound), int(upperBound),
ValueError: invalid literal for int() with base 10: '2016-01-01 00:00:00'

我看了这里的源代码https://github.com/apache/spark/blob/master/python/pyspark/sql/readwriter.py#l865 发现它不支持文档中所说的日期时间类型。
我的问题是:
正如代码所示,它不支持pyspark中的datetime类型分区列,但是为什么文档说它支持它呢?
谢谢,
雁鸣声

ncgqoxb0

ncgqoxb01#

它支持。
这里的问题是 spark.read.jdbc 方法当前仅支持整型列的参数上限/下限。
但你可以用 load 方法和 DataFrameReader.option 指定 upperBound 以及 lowerBound 对于其他列类型日期/时间戳:

df = spark.read.format("jdbc") \
    .option("url", "jdbc:mysql://server/db") \
    .option("dbtable", "table_name") \
    .option("user", "user") \
    .option("password", "xxxx") \
    .option("partitionColumn", "EVENT_CAPTURED") \
    .option("lowerBound", "2016-01-01 00:00:00") \
    .option("upperBound", "2016-01-10 00:00:00") \
    .option("numPartitions", "8") \
    .load()

或者通过传递选项:

df = spark.read.format("jdbc") \
    .options(*sql_conn_params)\
    .load()

您可以在此处看到所有可用选项和示例:https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

相关问题