json - pyspark 将新的嵌套数组添加到现有的 json 文件中

标签 json hadoop apache-spark dataframe pyspark

我是 Spark 的新手,有一个大问题,我无法处理,即使经过数小时的搜索...... 我有一个看起来像这样的 jsonFile:

root
 |-- dialogueData: struct (nullable = true)
 |    |-- dialogueID: string (nullable = true)
 |    |-- dialogueLength: double (nullable = true)
 |    |-- speakerChanges: long (nullable = true)
 |-- snippetlist: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- confidence: double (nullable = true)
 |    |    |-- length: double (nullable = true)
 |    |    |-- role: string (nullable = true)
 |    |    |-- snippetID: string (nullable = true)
 |    |    |-- transcription: string (nullable = true)
 |    |    |-- wordCount: long (nullable = true)

我的程序进行情绪分析并返回带有预测(1.0、0.0、-1.0 等)的数据框列,还返回一些值,例如平均值。 现在我的问题:

我想做两件事:

  1. 我想将我的平均值添加到第一个结构“dialogeData”

  2. 我想将我的整个列作为新结构“sentiment”添加到数组“snippetlist”中,以便为数组中的每个片段显示正确的情绪。

这可能吗?我真的没有找到关于那个案例的任何好东西,所以我真的希望有人能帮助我。

非常感谢!

最佳答案

首先,在任何其他添加方法之前,您需要进行连接,以便您要添加的元素位于添加到原始数据框中的新列中。 在任何情况下,一旦你有了相关的数据框,你就可以将它写入 json

要创建相关数据框,您有多种选择:

第一个选项(如果您了解 scala,这是最简单的)是使用 scala,在这种情况下,您可以通过创建一个表示原始值和目标值的案例类并进行相应的转换(不太漂亮)来使用数据集 API。

第二种选择是转为RDD,使用map添加相关数据。这可能非常丑陋且效率低下。

第三种选择是使用 to_json 将整个记录转换为 json 字符串然后您可以编写一个 UDF 将字符串转换为目标的 json(接收附加输入,将 json 转换为字典,更新字典并转换回到 json)。然后可以使用 from_json 函数将生成的字符串转换回数据帧信息。

第四个选项是使用数据框选项。这个想法是,您可以使用 select("structName.*") 展平一个结构,然后您可以使用 struct(col1, col2, ...) 重新创建它。

要将一个元素添加到数组中,您首先需要对其进行 posexplode(这将从数组中的每个元素创建一行,其中一列用于位置,一列用于值),然后展平它,然后添加元素(通过使用 getItem 函数获取相关位置)并转换回 struct 和 collect_list。

关于json - pyspark 将新的嵌套数组添加到现有的 json 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45214892/

相关文章:

javascript - 使用 javascript 将 List 从 JSON 元素转换为 ArrayList

jquery - 在 jQuery 中解析 JSON 对象并创建下拉菜单

javascript - Polymer Web 组件测试 : How to import dummy test data from a local . json 文件

Python:从 python shell 命令替换 json 文件中的字符串

java - Ambari 资源目录?

java - Mapreduce用于图像分类

python - 我应该将广播变量或broadcast.value()传递到我的RDD[自定义对象]中吗?

hadoop - 需要用户选择/输入四分之一以在PIG-0.12.0中获得所需的输出

apache-spark - Pyspark - 如何拆分具有 Datetime 类型结构值的列?

scala - 如何确保我的 Apache Spark 设置代码仅运行一次?