如何根据在 pyspark 中作为字符串传递的日期值创建数据框?

How to create a data frame by based on the date value passed as a string in pyspark?

我有如下数据集: 文件:test.txt

149|898|20180405
135|379|20180428
135|381|20180406
31|898|20180429
31|245|20180430
135|398|20180422
31|448|20180420
31|338|20180421

我通过执行以下代码创建了数据框。

spark = SparkSession.builder.appName("test").getOrCreate()
sc = spark.sparkContext
sqlContext = SQLContext(sc)
df_transac = spark.createDataFrame(sc.textFile("test.txt")\
    .map(lambda x: x.split("|")[:3])\
    .map(lambda r: Row('cCode'= r[0],'pCode'= r[1],'mDate' = r[2])))
df_transac .show()

+-----+-----+----------+
|cCode|pCode|     mDate|
+-----+-----+----------+
|  149|  898| 20180405 |
|  135|  379| 20180428 |
|  135|  381| 20180406 |
|   31|  898| 20180429 |
|   31|  245| 20180430 |
|  135|  398| 20180422 |
|   31|  448| 20180420 |
|   31|  338| 20180421 |
+-----+-----+----------+

我的 df.printSchemashow 如下所示:

df_transac.printSchema()
root
 |-- customerCode: string (nullable = true)
 |-- productCode: string (nullable = true)
 |-- quantity: string (nullable = true)
 |-- date: string (nullable = true)

但我想根据我的输入日期创建一个数据框,即 date1="20180425" date2="20180501"

我的预期输出是:

+-----+-----+----------+
|cCode|pCode|     mDate|
+-----+-----+----------+
|  135|  379| 20180428 |
|   31|  898| 20180429 |
|   31|  245| 20180430 |
+-----+-----+----------+

请帮助我如何实现这一点。

这是一个应用于您的 df 的简单过滤器:

df_transac.where("mdate between '{}' and '{}'".format(date1,date2)).show()

+-----+-----+--------+
|cCode|pCode|   mDate|
+-----+-----+--------+
|  135|  379|20180428|
|   31|  898|20180429|
|   31|  245|20180430|
+-----+-----+--------+