Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 来自多个列的Pyspark日期格式_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Apache spark 来自多个列的Pyspark日期格式

Apache spark 来自多个列的Pyspark日期格式,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我的数据框中有四个字符串列“小时”、“天”、“月”、“年”。我想以'dd/MM/yyyy HH:MM'的格式创建新的fulldate列 df2 = df1.withColumn("fulldate", to_date(concat(col('day'), lit('/'), col('month'), lit('/'), col('year'), lit(' '), col('hour'), lit(':'), lit('0'), lit('0')), 'dd/MM/yyyy

我的数据框中有四个字符串列
“小时”、“天”、“月”、“年”
。我想以
'dd/MM/yyyy HH:MM'
的格式创建新的fulldate列

df2 = df1.withColumn("fulldate", to_date(concat(col('day'), lit('/'), col('month'), lit('/'), col('year'), lit(' '), col('hour'), lit(':'), lit('0'), lit('0')), 'dd/MM/yyyy HH:mm'))
但它似乎不起作用。我得到的格式是“yyyy-mm-dd”


我遗漏了什么吗?

使用
日期格式
而不是
到日期

to_date
将列从给定格式转换为日期类型,而
date\u格式将日期类型列转换为给定格式

from pyspark.sql.functions import date_format, concat, col, lit

df2 = df1.withColumn(
    "fulldate",
    date_format(
        concat(col('year'), lit('/'), col('month'), lit('/'), col('day'), lit(' '), col('hour'), lit(':'), lit('00'), lit(':'), lit('00')),
        'dd/MM/yyyy HH:mm'
    )
)
为了提高可读性,您可以使用
格式\u字符串

from pyspark.sql.functions import date_format, format_string, col

df2 = df1.withColumn(
    "fulldate",
    date_format(
        format_string('%d/%d/%d %d:00:00', col('year'), col('month'), col('day'), col('hour')),
        'dd/MM/yyyy HH:mm'
    )
)

使用
date\u格式
而不是
到日期

to_date
将列从给定格式转换为日期类型,而
date\u格式将日期类型列转换为给定格式

from pyspark.sql.functions import date_format, concat, col, lit

df2 = df1.withColumn(
    "fulldate",
    date_format(
        concat(col('year'), lit('/'), col('month'), lit('/'), col('day'), lit(' '), col('hour'), lit(':'), lit('00'), lit(':'), lit('00')),
        'dd/MM/yyyy HH:mm'
    )
)
为了提高可读性,您可以使用
格式\u字符串

from pyspark.sql.functions import date_format, format_string, col

df2 = df1.withColumn(
    "fulldate",
    date_format(
        format_string('%d/%d/%d %d:00:00', col('year'), col('month'), col('day'), col('hour')),
        'dd/MM/yyyy HH:mm'
    )
)
对于Spark 3+,您可以使用函数从这些列创建时间戳列,并使用将其转换为所需的日期模式:

from pyspark.sql import functions as F

df2 = df1.withColumn(
    "fulldate",
    F.date_format(
        F.expr("make_timestamp(year, month, day, hour, 0, 0)"),
        "dd/MM/yyyy HH:mm"
    )
)
对于Spark 3+,您可以使用函数从这些列创建时间戳列,并使用将其转换为所需的日期模式:

from pyspark.sql import functions as F

df2 = df1.withColumn(
    "fulldate",
    F.date_format(
        F.expr("make_timestamp(year, month, day, hour, 0, 0)"),
        "dd/MM/yyyy HH:mm"
    )
)

date\u格式
采用日期/时间戳类型,并以给定格式模式返回字符串
to_date
使用给定模式从日期字符串返回日期类型。您需要将
添加到\u时间戳(conact(…
添加到\u时间戳(格式化\u字符串(…
否则它将返回null,我想。@Blackishop如果我错了,请纠正我,但说明
date\u格式
也采用字符串类型…?是的,但仅当字符串日期为默认格式时:
yyyy-MM-dd
用于日期或
yyyy-MM-dd HH:MM:ss
用于时间戳。@Blackishop啊,谢谢,我没有意识到这一点asn不是标准格式。将进行编辑以确保标准的
date\u格式
采用日期/时间戳类型并以给定格式模式返回字符串。
to\u date
使用给定模式从日期字符串返回日期类型。您需要将
添加到\u时间戳(conact(…
添加到\u时间戳(格式字符串(…
否则它将返回null,我想。@Blackishop如果我错了,请纠正我,但说明
date\u格式
也采用字符串类型…?是的,但仅当字符串日期为默认格式时:
yyyy-MM-dd
用于日期或
yyyy-MM-dd HH:MM:ss
用于时间戳。@Blackishop啊,谢谢,我没有意识到这一点asn不是标准格式。将进行编辑以确保它是标准格式