Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pyspark将新嵌套数组添加到现有json文件_Json_Hadoop_Apache Spark_Dataframe_Pyspark - Fatal编程技术网

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

pyspark将新嵌套数组添加到现有json文件,json,hadoop,apache-spark,dataframe,pyspark,Json,Hadoop,Apache Spark,Dataframe,Pyspark,我是Spark的新手,有一个大问题,我无法处理,即使经过几个小时的搜索。。。 我有一个jsonFile,看起来像这样: root |-- dialogueData: struct (nullable = true) | |-- dialogueID: string (nullable = true) | |-- dialogueLength: double (nullable = true) | |-- speakerChanges: long (nullable =

我是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等)的数据帧列,还返回一些值,如平均值。 现在我的问题是:

我想做两件事:

  • 我想将我的示例平均值添加到第一个结构“dialogeData”

  • 我想将我的整个列作为一个新的结构“情绪”添加到数组“snippetlist”,这样数组中的每个片段都会显示正确的情绪

  • 可能吗?我真的没有发现那个案子有什么好处,所以我真的希望有人能帮我


    非常感谢

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

    要创建相关数据框,您有几个选项:

    第一个选项(如果您知道scala,这是最简单的)是使用scala,在这种情况下,您可以通过创建一个表示原始值和目标值的case类并相应地进行转换(不是很漂亮)来使用dataset API

    第二个选项是转换为RDD并使用map添加相关数据。这可能是非常丑陋和低效的

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

    第四个选项是使用数据帧选项。其思想是,您可以使用select(“structName.*”)展平一个结构,然后使用struct(col1,col2,…)重新创建它


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

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

    要创建相关数据框,您有几个选项:

    第一个选项(如果您知道scala,这是最简单的)是使用scala,在这种情况下,您可以通过创建一个表示原始值和目标值的case类并相应地进行转换(不是很漂亮)来使用dataset API

    第二个选项是转换为RDD并使用map添加相关数据。这可能是非常丑陋和低效的

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

    第四个选项是使用数据帧选项。其思想是,您可以使用select(“structName.*”)展平一个结构,然后使用struct(col1,col2,…)重新创建它


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

    嘿,谢谢你的快速回答。我不想提及我使用Pypark。。。嗯,你最后的方法听起来很好。你能给我解释一下“posexplode”吗,或者它只是正常的“explode”功能?你能提供一些代码示例吗?我对这个话题很陌生,很困惑…看看它已经有了一个很好的例子。好的,我现在有了我想要的DF。此数组现在表示上述“snippetlist”数组。我怎样才能在现有的jsonFile中实际恢复这个功能呢?您可以执行df.coalesce(1.write.mode(“overwrite”).json(filename),但我不会这样做。首先,如果您只编写一个文件,而其中的所有内容(根据定义)都不是并行的,那么如果文件很大,则可能会导致问题。作为一个好的实践,我不喜欢覆盖,因为如果出现问题,你可能会失去一切。最后,我们需要一个包含所有内容的Json文件,因此,当我创建一个新的Json文件时,我必须从我提到的数据帧创建一个“Json数组”,以便获得我在问题中发布的Json的结构,但现在添加了条目“情绪”。你知道我怎么做吗?嘿,谢谢你的快速回答。我不想提及我使用Pypark。。。嗯,你最后的方法听起来很好。你能给我解释一下“posexplode”吗,或者它只是正常的“explode”功能?你能提供一些代码示例吗?我对这个话题很陌生,很困惑…看看它已经有了一个很好的例子。好的,我现在有了我想要的DF。此数组现在表示上述“snippetlist”数组。我怎样才能在现有的jsonFile中实际恢复这个功能呢?您可以执行df.coalesce(1.write.mode(“overwrite”).json(filename),但我不会这样做。首先,如果您只编写一个文件,而其中的所有内容(根据定义)都不是并行的,那么如果文件很大,则可能会导致问题。作为一个好的实践,我不喜欢覆盖,因为如果出现问题,你可能会失去一切。我会保存到另一个位置。最后,我们需要一个包含