Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark Spark结构化流媒体中逐行拆分Kafka消息_Apache Spark_Pyspark_Spark Streaming_Spark Streaming Kafka - Fatal编程技术网

Apache spark Spark结构化流媒体中逐行拆分Kafka消息

Apache spark Spark结构化流媒体中逐行拆分Kafka消息,apache-spark,pyspark,spark-streaming,spark-streaming-kafka,Apache Spark,Pyspark,Spark Streaming,Spark Streaming Kafka,我想在Spark结构化流媒体作业中将来自Kafka主题的消息读入数据帧。但我在一个偏移量中获取整个消息,所以在数据帧中,只有该消息进入一行,而不是多行。在我的情况下,它是3行 当我打印此消息时,我得到以下输出: 消息Text1、Text2和Text3我想要在数据框中的3行中显示,以便我可以进一步处理 请帮助我。您可以使用用户定义的函数UDF将消息字符串转换为字符串序列,然后在该列上应用分解函数,为序列中的每个元素创建新行: 如下面scala中所示,相同的原理适用于pyspark: case cl

我想在Spark结构化流媒体作业中将来自Kafka主题的消息读入数据帧。但我在一个偏移量中获取整个消息,所以在数据帧中,只有该消息进入一行,而不是多行。在我的情况下,它是3行

当我打印此消息时,我得到以下输出:

消息Text1、Text2和Text3我想要在数据框中的3行中显示,以便我可以进一步处理

请帮助我。

您可以使用用户定义的函数UDF将消息字符串转换为字符串序列,然后在该列上应用分解函数,为序列中的每个元素创建新行:

如下面scala中所示,相同的原理适用于pyspark:

case class KafkaMessage(offset: Long, message: String)

import org.apache.spark.sql.functions.udf
import org.apache.spark.sql.functions.explode

val df = sc.parallelize(List(KafkaMessage(1000, "Text1\nText2\nText3"))).toDF()

val splitString = udf { s: String => s.split('\n') }

df.withColumn("splitMsg", explode(splitString($"message")))
  .select("offset", "splitMsg")
  .show()
这将产生以下输出:

+------+--------+
|offset|splitMsg|
+------+--------+
|  1000|   Text1|
|  1000|   Text2|
|  1000|   Text3|
+------+--------+