Python 如何查找数组中的任何元素是否在pyspark的范围内

Python 如何查找数组中的任何元素是否在pyspark的范围内,python,arrays,apache-spark,pyspark,Python,Arrays,Apache Spark,Pyspark,我在数据帧中有一列数组,我想知道数组的任何元素是否在某个范围内。 示例: 输入: 利息的日期范围为2018年8月8日和2019年12月8日。 输出: 我的数据帧的架构是: root |-- dateTimeValue: array (nullable = true) | |-- element: timestamp (containsNull = true) 可通过以下方式生成输入: 导入日期时间 df=spark.createDataFrame([([datetime.datet

我在数据帧中有一列数组,我想知道数组的任何元素是否在某个范围内。 示例:
输入:

利息的日期范围为2018年8月8日和2019年12月8日。
输出:

我的数据帧的架构是:

root 
|-- dateTimeValue: array (nullable = true) | 
    |-- element: timestamp (containsNull = true)
可通过以下方式生成输入:

导入日期时间
df=spark.createDataFrame([([datetime.datetime(2019,11,20,8,47),datetime.datetime(2020,10,15,20,8,47),datetime.datetime(2021,9,19,20,8,47)],([datetime.datetime(2017,11,5,20,8,47),datetime.datetime(2020,5,5,20,8,47),datetime.datetime(2021,11,20,8,47)],['dateTimeValue']))
谢谢。

使用,您可以为数组中的每个元素创建新行,并将每个元素与范围的边界进行比较

导入日期时间
导入pyspark.sql.F函数
df=spark.createDataFrame([([datetime.datetime(2019,11,20,8,47),datetime.datetime(2020,10,15,20,8,47),datetime.datetime(2021,9,19,20,8,47)],([datetime.datetime(2017,11,5,20,8,47),datetime.datetime(2020,5,5,20,8,47),datetime.datetime(2021,11,20,8,47)],['dateTimeValue']))
df.show(truncate=False)
df=df.withColumn('ex',F.explode('dateTimeValue'))
df=df.withColumn('includedFlag',F.when((F.col('ex')datetime.datetime(2018,8,8,00,00,00)),1)。否则(0))
df.groupby('dateTimeValue').agg(F.max('includedFlag').alias('includedFlag')).show(truncate=False)
输出:

+---------------------------------------------------------------+
|dateTimeValue                                                  |
+---------------------------------------------------------------+
|[2019-11-11 20:08:47, 2020-10-15 20:08:47, 2021-09-19 20:08:47]|
|[2017-11-05 20:08:47, 2020-05-05 20:08:47, 2021-11-11 20:08:47]|
+---------------------------------------------------------------+

+---------------------------------------------------------------+------------+
|dateTimeValue                                                  |includedFlag|
+---------------------------------------------------------------+------------+
|[2017-11-05 20:08:47, 2020-05-05 20:08:47, 2021-11-11 20:08:47]|0           |
|[2019-11-11 20:08:47, 2020-10-15 20:08:47, 2021-09-19 20:08:47]|1           |
+---------------------------------------------------------------+------------+
使用,可以为数组的每个元素创建新行,并将每个元素与范围的边界进行比较

导入日期时间
导入pyspark.sql.F函数
df=spark.createDataFrame([([datetime.datetime(2019,11,20,8,47),datetime.datetime(2020,10,15,20,8,47),datetime.datetime(2021,9,19,20,8,47)],([datetime.datetime(2017,11,5,20,8,47),datetime.datetime(2020,5,5,20,8,47),datetime.datetime(2021,11,20,8,47)],['dateTimeValue']))
df.show(truncate=False)
df=df.withColumn('ex',F.explode('dateTimeValue'))
df=df.withColumn('includedFlag',F.when((F.col('ex')datetime.datetime(2018,8,8,00,00,00)),1)。否则(0))
df.groupby('dateTimeValue').agg(F.max('includedFlag').alias('includedFlag')).show(truncate=False)
输出:

+---------------------------------------------------------------+
|dateTimeValue                                                  |
+---------------------------------------------------------------+
|[2019-11-11 20:08:47, 2020-10-15 20:08:47, 2021-09-19 20:08:47]|
|[2017-11-05 20:08:47, 2020-05-05 20:08:47, 2021-11-11 20:08:47]|
+---------------------------------------------------------------+

+---------------------------------------------------------------+------------+
|dateTimeValue                                                  |includedFlag|
+---------------------------------------------------------------+------------+
|[2017-11-05 20:08:47, 2020-05-05 20:08:47, 2021-11-11 20:08:47]|0           |
|[2019-11-11 20:08:47, 2020-10-15 20:08:47, 2021-09-19 20:08:47]|1           |
+---------------------------------------------------------------+------------+

这与pyspark有什么关系?你能分享更多你的代码吗?请参阅:。这是pyspark数据帧。请将
df.printSchema()
的输出添加到您的问题中。您可以使用Spark>=2.4吗?df.printSchema()的输出是根|--dateTimeValue:array(nullable=true)|--element:timestamp(containsnall=true),我可以在
df.printSchema()
的输出上使用Spark>=2.4,我们可以得到一些实际值吗?我不知道我们应该如何提供帮助。这与pyspark有什么关系?你能分享更多你的代码吗?请参阅:。这是pyspark数据帧。请将
df.printSchema()
的输出添加到您的问题中。您可以使用Spark>=2.4吗?df.printSchema()的输出是根|--dateTimeValue:array(nullable=true)|--element:timestamp(containsnall=true),我可以在
df.printSchema()
的输出上使用Spark>=2.4,我们可以得到一些实际值吗?我不知道我们应该如何帮助别人。
+---------------------------------------------------------------+
|dateTimeValue                                                  |
+---------------------------------------------------------------+
|[2019-11-11 20:08:47, 2020-10-15 20:08:47, 2021-09-19 20:08:47]|
|[2017-11-05 20:08:47, 2020-05-05 20:08:47, 2021-11-11 20:08:47]|
+---------------------------------------------------------------+

+---------------------------------------------------------------+------------+
|dateTimeValue                                                  |includedFlag|
+---------------------------------------------------------------+------------+
|[2017-11-05 20:08:47, 2020-05-05 20:08:47, 2021-11-11 20:08:47]|0           |
|[2019-11-11 20:08:47, 2020-10-15 20:08:47, 2021-09-19 20:08:47]|1           |
+---------------------------------------------------------------+------------+