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

使用模式中的所有键(包括空列)将spark数据集写入json

萧煜
2023-03-14

我正在使用以下方法将数据集写入json:

ds.coalesce(1).write.format("json").option("nullValue",null).save("project/src/test/resources")

对于具有空值列的记录,json文档根本不写入该键。

有没有办法对json输出强制执行空值键?

这是必要的,因为我使用这个json将其读取到另一个数据集(在测试用例中),并且如果某些文档没有case类中的所有键,则无法强制执行模式(我通过将json文件放在资源文件夹下读取它并通过RDD[String]转换为数据集,如下所述:https://databaseline.bitbucket.io/a-quickie-on-reading-json-resource-files-in-apache-spark/)

共有1个答案

孙修德
2023-03-14

我同意@philantrovert。

ds.na.fill("")
  .coalesce(1)
  .write
  .format("json")
  .save("project/src/test/resources")

由于数据集是不可变的,因此您不能在ds中更改数据,您可以在以下任何代码中处理它(包括空值和全部)。您只需在保存的文件中用空字符串替换空值。

 类似资料:
  • 我正在使用下面的代码片段来保存数据。它只会在同一分区文件夹下创建一个新的拼花地板文件。是否有任何方法可以将数据真正附加到现有的拼花地板文件中。所以,如果一天中有许多附件,我们就不会有多个文件? <代码>测向。聚结(1)。写模式(“追加”)。partitionBy(“paritionKey”)。拼花地板(“…\parquet\u file\u folder\”) 非常感谢你的帮助。

  • 使用Spark Dataset/DataFrame联接时,我面临长时间运行且OOM作业失败的问题。 以下是输入: ~10个不同大小的数据集,大部分是巨大的( 经过一番分析,我发现作业失败和缓慢的原因是歪斜键:当左侧有数百万条记录时,用连接键。 我用了一些蛮力的方法来解决这个问题,这里我想和大家分享一下。 如果您有更好的或任何内置的解决方案(针对常规Apache Spark),请与他人分享。

  • 我正在尝试使用pysparkn和spack-csv使用以下代码将火花数据帧写入s3 但是,我得到的错误是“输出目录已经存在”,我确信输出目录在作业开始之前不存在,我尝试使用不同的输出目录名称运行,但写入仍然失败。 如果我在作业失败后查看s3桶,我发现很少有零件文件是由火花写入的,但当它尝试写入更多时它失败了,脚本在本地运行良好,我在aws集群上使用10个火花执行器。有人知道这段代码有什么问题吗?

  • spark的新成员...如何使用spark数据集中的列ask键获取一些值并将这些值作为新列添加到数据集中? 在python中,我们有类似的东西: 其中D是前面定义的python中的函数。 如何使用Java在spark中实现这一点?非常感谢。 编辑:例如:我有以下数据集df: 我想根据以下字典创建一个工作日列: 并将列添加回我的数据集df: 这只是一个示例,列A当然可以是整数以外的任何东西。

  • 我正在使用Apache Spark生成拼花文件。我可以按日期划分它们,没有问题,但在内部我似乎无法按正确的顺序排列数据。 在处理过程中,顺序似乎丢失了,这意味着拼花地板元数据是不正确的(具体来说,我想确保拼花地板行组反映排序顺序,以便特定于我的用例的查询可以通过元数据有效地过滤)。 考虑以下示例: 使用这种方法,我确实得到了正确的拼花地板分区结构(按日期)。更好的是,对于每个日期分区,我看到一个大

  • 当我尝试基于avro模式将avro数据写入s3时 DF数据类型: finaldf.write().option(“avroschema”,string.valueof(inAvroSchema)).format(“com.databricks.spark.avro”).mode(“overwrite”).save(“target_s3_path”); 我得到了错误: