我试图测试一些函数,其中操纵一个pyspark Dataframe 。我使用Python中的unittest
库来实现这一点。下面是我的setUp
函数:
class TestMyClass(TestCase):
def setUp(self):
self.spark = (SparkSession
.builder
.master("local[*]")
.appName("Unit-tests")
.getOrCreate())
self.data = [
(datetime(2023, 4, 25, 0, 0, 0), "A", 100.5),
(datetime(2023, 4, 26, 0, 0, 0), "A", 110.0),
(datetime(2023, 4, 28, 0, 0, 0), "A", 105.0),
(datetime(2023, 4, 25, 0, 0, 0), "B", 50.5),
(datetime(2023, 4, 27, 0, 0, 0), "B", 55.5),
]
self.schema = StructType([
StructField("time", TimestampType(), True), \
StructField("id", StringType(), True), \
StructField("value", DoubleType(), True)
])
self.df = spark.createDataFrame(
data=self.data,
schema=self.schema
)
然而,当我尝试调试代码时,我注意到time
列中的时间戳被转换为两个小时前的时间,因此转换为22:00:00
。但是,如果我在setUp
函数中使用相同的代码,并删除self.
,并在笔记本中执行,时间不会改变。TestCase
类是否内置了一些时区敏感性?我该怎么避免呢?
1条答案
按热度按时间xzv2uavs1#
只有unix epoch不受时区的影响,因为它只是自1970年1月1日(UTC/GMT午夜)以来经过的秒数。
你的datetime对象和Spark应用程序都将受到运行机器的时区设置的影响。您可以:
1.使用unix epoch
1.使用Spark SQL时,通过设置
spark.sql.session.timeZone
来配置spark应用程序的时区。例如,您可以在需要UTC+8时区时设置Asia/Hong_Kong
。