PySpark DataFrame 不断将时间列转换为时间戳
PySpark DataFrame keeps converting time column to timestamp
我正在阅读来自 PostgreSQL 的 table。 table 包含列 elap_time
,其 datatype
为 time
。但是当读入 spark DataFrame
时,它会自动将其转换为 timestamp
。如何避免这种情况。
config = {"fs.gs.impl": "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem",
"fs.AbstractFileSystem.gs.impl": "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS"
}
conf = spark.sparkContext._jsc.hadoopConfiguration()
for (name, value) in config.items():
conf.set(name, value)
source = {
"url": url,
'user': user,
'database': db,
'password': pass,
'port': '5432',
'driver': 'org.postgresql.Driver',
'dbtable': 'newtable'
}
spark.read.format("JDBC").options(**source).load()
df.printSchema()
这是输出:
#|-- elap_time: timestamp (nullable = true)
这是数据库中的实际数据
+-------------------+
| elap_time |
+-------------------+
|08:02:19 |
|08:02:19 |
+-------------------+
这是spark数据帧的输出
+-------------------+
| elap_time|
+-------------------+
|1970-01-01 08:02:19|
|1970-01-01 08:02:19|
+-------------------+
根据用户 DKNY 在评论部分的建议。 “您的数据框已创建,使用 withColumn 添加一个新列,然后将原始时间解析为 date_format(to_timestamp(), "HH:mm:ss")。您可以将原始列替换为新创建的列。我知道这是一种解决方法,但我现在想不出任何替代解决方案。"
from pyspark.sql.functions import date_format
df = df.withColumn('date', date_format('date', 'HH:mm:ss'))
df.show()
我正在阅读来自 PostgreSQL 的 table。 table 包含列 elap_time
,其 datatype
为 time
。但是当读入 spark DataFrame
时,它会自动将其转换为 timestamp
。如何避免这种情况。
config = {"fs.gs.impl": "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem",
"fs.AbstractFileSystem.gs.impl": "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS"
}
conf = spark.sparkContext._jsc.hadoopConfiguration()
for (name, value) in config.items():
conf.set(name, value)
source = {
"url": url,
'user': user,
'database': db,
'password': pass,
'port': '5432',
'driver': 'org.postgresql.Driver',
'dbtable': 'newtable'
}
spark.read.format("JDBC").options(**source).load()
df.printSchema()
这是输出:
#|-- elap_time: timestamp (nullable = true)
这是数据库中的实际数据
+-------------------+
| elap_time |
+-------------------+
|08:02:19 |
|08:02:19 |
+-------------------+
这是spark数据帧的输出
+-------------------+
| elap_time|
+-------------------+
|1970-01-01 08:02:19|
|1970-01-01 08:02:19|
+-------------------+
根据用户 DKNY 在评论部分的建议。 “您的数据框已创建,使用 withColumn 添加一个新列,然后将原始时间解析为 date_format(to_timestamp(), "HH:mm:ss")。您可以将原始列替换为新创建的列。我知道这是一种解决方法,但我现在想不出任何替代解决方案。"
from pyspark.sql.functions import date_format
df = df.withColumn('date', date_format('date', 'HH:mm:ss'))
df.show()