当前位置: 首页 > 知识库问答 >
问题:

使用 pyspark 将结构类型、数组类型转换/转换为字符串类型(单值)

金霄
2023-03-14

我的一个数据帧(spark.sql)有这个模式。

root
 |-- ValueA: string (nullable = true)
 |-- ValueB: struct (nullable = true)
 |    |-- abc: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- a0: string (nullable = true)
 |    |    |    |-- a1: string (nullable = true)
 |    |    |    |-- a2: string (nullable = true)
 |    |    |    |-- a3: string (nullable = true)
 |-- ValueC: struct (nullable = true)
 |    |-- pqr: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- info1: string (nullable = true)
 |    |    |    |-- info2: struct (nullable = true)
 |    |    |    |    |-- x1: long (nullable = true)
 |    |    |    |    |-- x2: long (nullable = true)
 |    |    |    |    |-- x3: string (nullable = true)
 |    |    |    |-- info3: string (nullable = true)
 |    |    |    |-- info4: string (nullable = true)
 |-- Value4: struct (nullable = true)
 |    |-- xyz: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- b0: string (nullable = true)
 |    |    |    |-- b2: string (nullable = true)
 |    |    |    |-- b3: string (nullable = true)
 |-- Value5: string (nullable = true)

我需要将其保存到CSV文件,但不使用任何扁平化,以以下格式分解。

 |-- ValueA: string (nullable = true)
 |-- ValueB: struct (nullable = true)
 |-- ValueC: struct (nullable = true)
 |-- ValueD: struct (nullable = true)
 |-- ValueE: string (nullable = true)

我直接使用了命令 [df.to_pandas().to_csv(“输出.csv”)],这符合我的目的,但我需要一个更好的方法。我正在使用派斯帕克

共有1个答案

陈高寒
2023-03-14

在Spark中编写< code>csv格式不支持编写< code >结构/数组..etc复杂类型。

< code >编写为拼花文件:

Spark中更好的方法是以<code>parquet

df.write.parquet("<path>")

< code >编写为Json文件:

如果接受json格式的写作

df.write.json("path")
#or
df.toJSON().saveAsTextFile("path")

写入CSV文件:

使用<code>to_json转换为<code>字符串

df.selectExpr("valueA","to_json(ValueB)"..etc).write.csv("path")
 类似资料:
  • 问题内容: 我正在从在Varchar中具有原始提要的表中导入数据,我需要将varchar中的列导入到字符串列中。我尝试使用以及,但是却遇到了错误,因为有一些空字段,我需要将它们作为空或null检索到新表中。 请让我知道是否有相同的功能。 问题答案: 大胆猜测:如果您的值是一个空字符串,则可以使用NULLIF将其替换为NULL:

  • 问题内容: 我想通过使用struct / interface的字符串名称值将特定变量转换为特定的已定义struct / interface。 例如: 和新变量 这可能是偶然的吗?也许使用反射? 干杯 问题答案: 这不可能。Go是一种静态类型的语言,这意味着必须在编译时知道变量和表达式的类型。 在类型断言中: […]如果类型断言成立,则表达式的值为存储在其中的值,其类型为。 因此,您可以使用类型断言

  • 我刚接触Apache POI和HttpClient,我很困惑。我的程序应该从excel单元格中获取值,并在HttpGet请求中使用该值。以下是不起作用的方法: wb.getSheetAt(0)。getRow(rowNumber)。get cell(3);是XSSFCell类型,我需要把它转换成一个字符串。这可能吗,还是我没有正确地提取这个值?

  • 本文向大家介绍VBA 使用CStr将数字类型转换为字符串,包括了VBA 使用CStr将数字类型转换为字符串的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 输入自由度: (预期)输出DF: 我已经尝试使用< code>split函数,但它并不完全符合我的需求。

  • 我有一个非常具体的要求。我有一个java应用程序,在这里我必须将字节数组转换为具有int、String等java类型的消息。消息的结构在c中定义如下- 我在java应用程序中收到的是字节数组。我不知道c应用程序是否使用proto缓冲区或任何其他方式来转换为字节数组。但是,如果我逐个字节地解析数组,我可以得到值。例如- 这一行将返回正确的id值(结构中的第一个属性是int)。 我的问题是——如果我为