【发布时间】: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] 是一个数据框
-
是的,这行得通:df_tmp.withColumn("_1new", df_tmp._1.value)