Spark - Python - 获取RDD上的年/月-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Spark - Python - 获取RDD上的年/月

社区小助手 2018-12-21 13:57:18 1128

我有一个带有两个元素(id,date)的RDD。具有以下结构:

data=sc.textFile("/user/cloudera/dates.txt")
1,01-01-2001
2,01-02-2001
3,01-03-2001
我想将我的RDD转换为:

1,01/2001
2,02/2001
3,03/2001
我怎样才能做到这一点?我尝试使用地图:

data.map(lambda l: (year(l[1]) + month(l[1])))
但是年份和月份没有定义

python获取的
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:23:26

    尝试解析字符串日期,然后使用withColumn并在每行上应用并获取解析后的新日期列。您应该将您的函数定义为udf之前使用它。

    import datetime

    def date_time_to_date(input_date_time):
    new_date = datetime.datetime.strptime(input_date_time, "%d-%M-%Y").date()
    return str(new_date.month) + "/"+ str(new_date.year)

    udf_date_time_to_date = udf(date_time_to_date, StringType())
    data.toDF(['id' , 'date']).withColumn('new_date', udf_date_time_to_date('date'))


    您应该将文件读作csv而不是文本。我只是在Scala中使用硬编码的df来模仿它。您应该能够使用类似的语法将其转换为python。

    val df = Seq((1,"01-01-2001"),(2,"01-02-2001"),(3,"01-03-2001")).toDF("a","b")
    val df2 = df.withColumn("b",to_date('b,"dd-MM-yyy"))
    df2.printSchema()
    df2.show(false)
    df2.select(col("a"), date_format('b,"MM/yyyy").as("dt1")).show(false)
    结果:

    root
    |-- a: integer (nullable = false)
    |-- b: date (nullable = true)

    a b
    1 2001-01-01
    2 2001-02-01
    3 2001-03-01
    a dt1
    1 01/2001
    2 02/2001
    3 03/2001
    0 0
大数据
使用钉钉扫一扫加入圈子
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

相似问题
最新问题