【问题标题】:PySpark - Create a Dataframe with timestamp column datatypePySpark - 创建具有时间戳列数据类型的数据框
【发布时间】:2021-09-06 11:31:21
【问题描述】:

我想在 Azure Databricks 上的笔记本中使用 PySpark 创建一个简单的数据框。数据框只有 3 列:

  1. TimePeriod - 字符串
  2. StartTimeStanp - 类似“timestamp”的数据类型或可以以“HH:MM:SS:MI”* 形式保存时间戳(无日期部分)的数据类型
  3. EndTimeStanp - 类似“timestamp”的数据类型或可以以“HH:MM:SS:MI”* 形式保存时间戳(无日期部分)的数据类型

*小时:分钟:秒:毫秒,例如'15:59:59:59'

Example values for one row:
TimePeriod      = "00:00:00:00 -> 15:59:59:59"
StartTimeStamp  = 00:00:00:00
EndTimeStamp    = 15:59:59:59

Example values for secondone row:
TimePeriod      = "16:00:00:00 -> 18:59:59:59"
StartTimeStamp  = 16:00:00:00
EndTimeStamp    = 18:59:59:59

其他行未显示

如果可能,我希望将时间戳列存储为以毫秒为单位的“时间戳”,而不是字符串。 'TimePeriod' 列可以作为字符串使用。

我是 PySpark 的新手,需要帮助编写代码来构建这个小数据框。如果答案不能使用 Panadas DF 那会很好。

【问题讨论】:

    标签: python-3.x pyspark azure-databricks


    【解决方案1】:

    你有几个选项:

    1. 选项:将列转换为时间戳:

        columns = ['TimePeriod', 'StartTimeStamp', 'EndTimeStamp']
        data = [("16:00:00:00 -> 18:59:59:59", '16:00:00.00', 
        '18:59:00.00')]
        df = spark.createDataFrame(data).toDF(*columns)
        columns = ['TimePeriod', 'StartTimeStamp', 'EndTimeStamp']
        df = 
        df.withColumn("StartTimeStamp",df.StartTimeStamp.cast('timestamp'))
        .withColumn('EndTimeStamp',df.EndTimeStamp.cast('timestamp'))
        df
      
        Output: DataFrame[TimePeriod: string, StartTimeStamp: timestamp, 
        EndTimeStamp: timestamp]
      

    选项 2: 将您的 StartTimeStamp 和 EndTimeStamp 从 str 转换为时间戳,并使用转换后的时间戳创建数据帧。

    import time
    import datetime
    timestamp = datetime.datetime.strptime('16:00:00:00',"%H:%M:%S:%f")
    timestamp2 = datetime.datetime.strptime('18:59:59:59',"%H:%M:%S:%f")
    columns = ['TimePeriod', 'StartTimeStamp', 'EndTimeStamp']
    data = [("16:00:00:00 -> 18:59:59:59", timestamp, timestamp2 )]
    
    dfFromData2 = spark.createDataFrame(data).toDF(*columns)
    dfFromData2
    
    Output: DataFrame[TimePeriod: string, StartTimeStamp: timestamp, 
    EndTimeStamp: timestamp]
    

    选项 3: 创建架构并根据您提供的架构创建 DataFrame:

    from pyspark.sql.types import StructType,StructField, TimestampType
    schema = StructType([
      StructField('TimePeriod', StringType(), True),
      StructField('StartTimeStamp', TimestampType(), True),
      StructField('EndTimeStamp', TimestampType(), True)
    ])
    df = spark.createDataFrame(data,schema)
    df
    
    Output: DataFrame[TimePeriod: string, StartTimeStamp: timestamp, 
    EndTimeStamp: timestamp]
    

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2022-06-21
      • 2022-06-25
      • 2019-10-11
      • 1970-01-01
      • 2022-07-11
      • 2021-06-25
      • 2022-01-18
      • 2020-11-22
      相关资源
      最近更新 更多