开发者社区> 问答> 正文

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

我有一个带有两个元素(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])))
但是年份和月份没有定义

展开
收起
社区小助手 2018-12-21 13:57:18 1870 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    尝试解析字符串日期,然后使用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
    2019-07-17 23:23:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载