使用 Spark Streaming 从 Kafka 主题读取 Json 数据。
我使用 DataFrame 来处理数据,稍后我希望将输出保存到 HDFS 文件。问题是使用:
df.write.save("append").format("text")
Run Code Online (Sandbox Code Playgroud)
产生许多文件,有些文件很大,有些甚至是 0 字节。
有没有办法控制输出文件的数量?另外,为了避免“相反”的问题,是否有办法限制每个文件的大小,以便当当前达到一定大小/行数时将写入新文件?
scala apache-kafka apache-spark spark-streaming apache-spark-sql
使用Spark流(用Scala编写)从 Kafka 读取消息。消息都是 Json 格式的字符串。
在局部变量中定义预期的模式,expectedSchema
然后将 RDD 中的字符串解析为 Json
spark.sqlContext.read.schema(schema).json(rdd.toDS())
Run Code Online (Sandbox Code Playgroud)
问题: Spark 将处理所有记录/行,只要它有一些我尝试读取的字段,即使输入行(字符串)的实际 Json 格式(即架构)与我的expectedSchema.
假设预期的模式看起来像这样(在 Json 中):{"a": 1,"b": 2, "c": 3}
并且输入行看起来像这样: {"a": 1, "c": 3}
Spark 将处理输入而不会失败。
我尝试使用此处描述的解决方案:How do I apply schema with nullable = false to json reading
但assert(readJson.schema == expectedSchema)永远不会失败,即使我故意发送带有错误 Json 模式的输入行也是如此。
有没有办法让我验证给定输入行的实际模式与我预期的模式相匹配?
有没有办法让我插入一个空值来“填充”“损坏”模式行中缺少的字段?