如何从pyspark数据框列值中删除方括号

Posted

技术标签:

【中文标题】如何从pyspark数据框列值中删除方括号【英文标题】:how to remove square braces from pyspark dataframe column values 【发布时间】:2018-08-07 10:27:45 【问题描述】:

我正在创建一个 pyspark 数据帧,方法是从另一个数据帧中选择一列并在转换为 RDD 后用索引压缩它,然后返回 DF,如下所示:

df_tmp=o[1].select("value").rdd.zipWithIndex().toDF()

o[1] 是一个数据框,值在 o[1]:

+-----+
|value|
+-----+
|    0|
|    0|
|    0|
+-----+
o[1].printSchema()
root
 |-- value: integer (nullable = true)

在这个过程中,“值”得到额外的方括号,如下所示:

+---+---+
| _1| _2|
+---+---+
|[0]|  0|
|[0]|  1|
+---+---+

df_tmp.printSchema():
root
 |-- _1: struct (nullable = true)
 |    |-- value: long (nullable = true)
 |-- _2: long (nullable = true)

当写入 hive 表时:saveAsTable(),它会导致问题,因为它将值写入:“”value”:0。但是我只想要值:0。

我怎样才能摆脱这个数据帧中的额外大括号,以便在写入 hive 表时可以获得正常的整数值。

【问题讨论】:

它给我一个错误:u"字段名称应该是字符串文字,但它是 0;" df_tmp.withColumn("_1new", df_tmp._1.getItem(0)) 呢?抱歉,如果不知道o究竟是什么……或者类似df_tmp.withColumn("_1new", df_tmp._1.value) 同样的错误。 o[1] 是一个数据框 类似的例子见***.com/questions/48062171/… 是的,这行得通:df_tmp.withColumn("_1new", df_tmp._1.value) 【参考方案1】:

(将其写为答案而不是评论):

df_tmp.withColumn("_1new", df_tmp._1.value)

这将创建一个名为“_1new”的新列,包括结构的“值”(列)。

【讨论】:

以上是关于如何从pyspark数据框列值中删除方括号的主要内容,如果未能解决你的问题,请参考以下文章

(Python)如何修复数据框列值中的数值表示错误

python, pyspark : 获取 pyspark 数据框列值的总和

如何从 pyspark 数据框列中的列表中删除特定字符串

如何检查来自不同数据框的列值?

从数据框列中的字符串值中删除字符

根据其他列值从数据框列中的列表中删除最后一个元素