我SparkStreaming通过将数据转换为数据帧来将数据写入 HDFS:
代码
object KafkaSparkHdfs {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkKafka")
sparkConf.set("spark.driver.allowMultipleContexts", "true");
val sc = new SparkContext(sparkConf)
def main(args: Array[String]): Unit = {
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
val ssc = new StreamingContext(sparkConf, Seconds(20))
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "localhost:9092",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"group.id" -> "stream3",
"auto.offset.reset" -> "latest",
"enable.auto.commit" -> (false: java.lang.Boolean)
)
val topics = Array("fridaydata")
val stream = KafkaUtils.createDirectStream[String, String](
ssc, PreferConsistent, Subscribe[String, String](topics, kafkaParams)
)
val …Run Code Online (Sandbox Code Playgroud) hadoop apache-kafka apache-spark spark-streaming apache-spark-sql
我正在尝试使用 SparkStreaming 将流数据存储到 HDFS 中,但它不断在新文件中创建,而不是附加到一个文件或多个文件中
如果它不断创建n个文件,我觉得效率不会很高
代码
lines.foreachRDD(f => {
if (!f.isEmpty()) {
val df = f.toDF().coalesce(1)
df.write.mode(SaveMode.Append).json("hdfs://localhost:9000/MT9")
}
})
Run Code Online (Sandbox Code Playgroud)
在我的 pom 中,我使用各自的依赖项: