to_date() 接受 1 个位置参数,但给出了 2 个

Posted

技术标签:

【中文标题】to_date() 接受 1 个位置参数,但给出了 2 个【英文标题】:to_date() takes 1 positional argument but 2 were given 【发布时间】:2020-01-30 05:43:11 【问题描述】:
| date|
+----------+
|  2/3/1994|
|  3/4/1994|
|  4/5/1994|
|  5/3/1994|
|  6/9/1994|
|  7/8/1994|
|  8/9/1994|
| 9/10/1994|
|10/10/1994|
| 11/4/1994|
| 12/3/1994|
|  2/4/1996|
|  4/9/1996|
|    5/7/96|
|  6/8/1996|
| 7/10/1996|
| 9/11/1996|
| 10/3/1996|
|  6/2/2000|
|  7/2/2000|


from pyspark.sql.functions import to_date
newdate=df6.withColumn(to_date(df6.date, 'yyyy-MM-dd').alias('dt')).show()

TypeError: to_date() takes 1 positional argument but 2 were given

【问题讨论】:

你使用了不正确的 withColumn 语法正确使用它 你用的是什么版本的 spark? 【参考方案1】:

withColumn 语法似乎是错误的。你可以试试这个:

newdate=df6.withColumn("new_date", to_date("date", 'dd/MM/yyyy')).show()

【讨论】:

不行,to_date解析日期需要日期格式,输入日期不是dd-MM-yyyy格式,是dd/MM/yyyy or MM/dd/yyyy【参考方案2】:
>>> from pyspark.sql.functions  import *
>>> df.show()
+----------+
|      date|
+----------+
|  2/3/1994|
|  3/4/1994|
|  4/5/1994|
|  5/3/1994|
|  6/9/1994|
|  7/8/1994|
|  8/9/1994|
| 9/10/1994|
|10/10/1994|
| 11/4/1994|
| 12/3/1994|
|  2/4/1996|
|  4/9/1996|
|    5/7/96|
|  6/8/1996|
| 7/10/1996|
| 9/11/1996|
| 10/3/1996|
|  6/2/2000|
|  7/2/2000|
+----------+

>>> df.withColumn("dt", to_date(col("date"), "MM/dd/yyyy")).show()
+----------+----------+
|      date|        dt|
+----------+----------+
|  2/3/1994|1994-02-03|
|  3/4/1994|1994-03-04|
|  4/5/1994|1994-04-05|
|  5/3/1994|1994-05-03|
|  6/9/1994|1994-06-09|
|  7/8/1994|1994-07-08|
|  8/9/1994|1994-08-09|
| 9/10/1994|1994-09-10|
|10/10/1994|1994-10-10|
| 11/4/1994|1994-11-04|
| 12/3/1994|1994-12-03|
|  2/4/1996|1996-02-04|
|  4/9/1996|1996-04-09|
|    5/7/96|0096-05-07|
|  6/8/1996|1996-06-08|
| 7/10/1996|1996-07-10|
| 9/11/1996|1996-09-11|
| 10/3/1996|1996-10-03|
|  6/2/2000|2000-06-02|
|  7/2/2000|2000-07-02|
+----------+----------+

【讨论】:

【参考方案3】:

to_date 从 Spark 2.2.0 开始进行了改造,如果您使用的是 Spark

参考Spark 2.2.0 pyspark.sql.functions.to_date和Spark 2.1.0 pyspark.sql.functions.to_date

【讨论】:

以上是关于to_date() 接受 1 个位置参数,但给出了 2 个的主要内容,如果未能解决你的问题,请参考以下文章

python接受1个位置参数,但给出了2个[重复]

TypeError: login() 接受 1 个位置参数,但给出了 2 个

TypeError: worker() 接受 0 个位置参数,但给出了 1 个

TypeError: __init__() 接受 1 个位置参数,但给出了 2 个

Python:函数接受 1 个位置参数,但给出了 2 个,如何?

TypeError: fit() 接受 1 个位置参数,但给出了 3 个