gpt4 book ai didi

hadoop - 从 Pyspark 将文件保存在 HDFS 中

转载 作者:可可西里 更新时间:2023-11-01 14:56:11 25 4
gpt4 key购买 nike

我在 Hive 中有一个空表,我的意思是该表中没有记录。

使用这个空表,我在 pyspark 中创建了一个 data frame

df = sqlContext.table("testing.123_test")

我已将此数据框注册为

中的临时表
df.registerTempTable('mytempTable')

date=datetime.now().strftime('%Y-%m-%d %H:%M:%S')

在这个表中,我有一个名为 id 的列。

现在我想像下面这样查询临时表

min_id = sqlContext.sql("select nvl(min(id),0) as minval from mytempTable").collect()[0].asDict()['minval']

max_id = sqlContext.sql("select nvl(max(id),0) as maxval from mytempTable").collect()[0].asDict()['maxval']

现在我想将datemin_idmax_id 保存到HDFS 中的文件中

我做了如下:

from pyspark.sql import functions as f

(sqlContext.table("myTempTable").select(f.concat_ws(",", f.first(f.lit(date)), f.min("id"), f.max("id"))).coalesce(1).write.format("text").mode("append").save("/tmp/fooo"))

现在,当我检查 HDFS 中的文件时,它显示所有 NULL 值。

HDFS 中的文件输出如下。

NULL,NULL,NULL

我想要的是

Date,0,0

这里的date是当前时间戳

我怎样才能实现我想要的。

最佳答案

这是在 scala 中,但您应该能够轻松地将它复制到 Python 中。你在这里需要的功能是na.fill功能。并且您必须在以下代码中用 Python 字典替换 Scala map :

这是你的 DF 的样子:

scala> nullDF.show
+----+----+----+
|date| x| y|
+----+----+----+
|null|null|null|
+----+----+----+

// You have already done this using Python's datetime functions
val format = new java.text.SimpleDateFormat("dd/MM/YYYY HH:mm:ss")
val curr_timestamp = format.format(new java.util.Date())

//Use na fill to replace null values
//Column names as keys in map
//And values are what you want to replace NULL with

val df = nullDF.na.fill(scala.collection.immutable.Map(
"date" -> ) ,
"x" -> "0" ,
"y" -> "0" ) )

这应该给你

+-------------------+---+---+
| date| x| y|
+-------------------+---+---+
|10/06/2017 12:10:20| 0| 0|
+-------------------+---+---+

关于hadoop - 从 Pyspark 将文件保存在 HDFS 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44468680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com