【问题标题】:how to remove square braces from pyspark dataframe column values如何从pyspark数据框列值中删除方括号
【发布时间】:2023-06-15 19:52:01
【问题描述】:

我正在创建一个 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)

标签: pyspark rdd braces


【解决方案1】:

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

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

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

【讨论】: