【发布时间】:2019-07-29 20:25:19
【问题描述】:
我有一个带有 normalized_date 列的数据框(beaconsDF):
+--------+--------------------+--------------------+
|isActive| company| Normalized_Date|
+--------+--------------------+--------------------+
| true|[593b0d9f3f21f9dd...|09/25/2018 00:00:...|
| true|[593b0d9f3f21f9dd...|11/29/2017 00:00:...|
| true|[593b0d9f3f21f9dd...|04/01/2019 00:00:...|
| true|[593b0d9f3f21f9dd...|09/25/2018 00:00:...|
| true|[593b0d9f3f21f9dd...|11/20/2018 00:00:...|
| true|[593b0d9f3f21f9dd...|09/25/2018 00:00:...|
| true|[593b0d9f3f21f9dd...|01/04/2019 00:00:...|
| true|[593b0d9f3f21f9dd...|01/04/2019 00:00:...|
+--------+--------------------+--------------------+
我想在这个简单的数据框(calendarDF2)中当日期等于 normalized_date 时过滤它:
+--------------------+
| Normalized_Date|
+--------------------+
|11/28/2017 00:00:...|
+--------------------+
我认为这几行代码可以工作:
tempRow = calendarDF2.take(1)
beaconsDF = beaconsDF.filter(beaconsDF.Normalized_Date == tempRow)
但是我在这些行中遇到了一个很长的错误:
py4j.protocol.Py4JJavaError: 调用 o214.equalTo 时出错。 : java.lang.RuntimeException: 不支持的文字类型类 java.util.ArrayList [[11/28/2017 00:00:00 AM]]
我认为我的问题在于日期的格式,因为我对不同类型的格式感到非常困惑。我打印了两个数据框中的值来比较它们并得到了这个:
[Row(Normalized_Date=u'11/28/2017 00:00:00 AM')]
[Row(Normalized_Date=u'04/01/2019 00:00:00 AM')]
看起来应该可以正确比较它们,对吧?我的问题也可能与我如何比较它们有关。我在某处看到我可能需要使用 3 个等号?我试过了,但没有用。我还尝试将 tempRow 设为文字,但这没有用。有什么想法吗?
编辑:我还想在将来按小于或等于 tempRow 日期进行过滤
【问题讨论】:
标签: python dataframe apache-spark pyspark apache-spark-sql