如何从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数据框列值中删除方括号的主要内容,如果未能解决你的问题,请参考以下文章