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

时间:2018-05-02 13:51:32

标签: apache-spark pyspark apache-spark-sql spark-dataframe pyspark-sql

我有一个如下数据集: 档案: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 |
+-----+-----+----------+

请帮忙解决这个问题。

1 个答案:

答案 0 :(得分:1)

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

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

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