如何使用Python一步创建带timestamp类型的Spark DataFrame
PySpark 3.1.2 单步创建带Timestamp类型的DataFrame方案
你不需要单独提前声明schema变量,直接将schema定义内嵌到createDataFrame调用中即可实现一步创建,以下是几种可行的实现方式:
方案1:兼容原有逻辑的内嵌写法
直接把原代码中单独赋值的schema定义作为参数传入createDataFrame,无需单独定义schema_sdf变量,运行效果和原有两步写法完全一致:
from pyspark.sql.functions import * from pyspark.sql.types import * sdf = spark.createDataFrame( [(to_timestamp(lit("2022-06-29 12:01:19.000")), 0)], schema=StructType([ StructField("ts", TimestampType(), True), StructField("myColumn", LongType(), True) ]) )
方案2:使用Python原生datetime对象简化时间传参
不需要嵌套调用to_timestamp(lit())包装时间字符串,直接传入Python原生datetime对象,Spark会自动识别匹配TimestampType,代码更简洁:
from pyspark.sql.types import * from datetime import datetime sdf = spark.createDataFrame( [(datetime(2022, 6, 29, 12, 1, 19), 0)], schema=StructType([ StructField("ts", TimestampType(), True), StructField("myColumn", LongType(), True) ]) )
方案3:使用DDL字符串极简定义schema
Spark支持直接传DDL格式的字符串作为schema,省去StructType的冗长定义,代码量最少:
from pyspark.sql.functions import to_timestamp, lit sdf = spark.createDataFrame( [(to_timestamp(lit("2022-06-29 12:01:19.000")), 0)], schema="ts timestamp, myColumn long" )
以上三种方案创建出的DataFrame执行
printSchema()都会输出如下结构,完全符合类型要求:root |-- ts: timestamp (nullable = true) |-- myColumn: long (nullable = true)
内容的提问来源于stack exchange,提问作者Luk-StackOverflow
相关产品推荐
相关产品推荐

