Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/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
Scala 从Kafka上的JSON消息在Spark Streaming中创建Spark数据帧_Scala_Apache Spark_Dataframe_Apache Kafka - Fatal编程技术网

Scala 从Kafka上的JSON消息在Spark Streaming中创建Spark数据帧

Scala 从Kafka上的JSON消息在Spark Streaming中创建Spark数据帧,scala,apache-spark,dataframe,apache-kafka,Scala,Apache Spark,Dataframe,Apache Kafka,我正在Scala中实现Spark Streaming,我从Kafka主题中提取JSON字符串,并希望将它们加载到数据帧中。有没有一种方法可以让Spark自己从RDD[String]推断模式?在Spark 1.4中,您可以尝试以下方法从RDD生成数据帧: val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc) val yourDataFrame = hiveContext.createDataFrame(yourRDD

我正在Scala中实现Spark Streaming,我从Kafka主题中提取JSON字符串,并希望将它们加载到数据帧中。有没有一种方法可以让Spark自己从RDD[String]推断模式?

在Spark 1.4中,您可以尝试以下方法从RDD生成数据帧:

  val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
  val yourDataFrame = hiveContext.createDataFrame(yourRDD)

可以,您可以使用以下选项:

sqlContext.read
//.schema(schema) //optional, makes it a bit faster, if you've processed it before you can get the schema using df.schema
.json(jsonRDD)  //RDD[String]

我现在也在试着这么做。我很好奇你是如何从卡夫卡中获得RDD[String]的,但我仍然觉得Spark+Kafka只做流媒体,而不是一次性“取出其中的内容”。)

您可以使用以下代码读取来自Kafka的消息流,提取JSON值并将其转换为DataFrame:

val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet)

messages.foreachRDD { rdd =>
//extracting the values only
  val df = sqlContext.read.json(rdd.map(x => x._2))
  df.show()
}

流媒体上没有模式推断。您始终可以读取文件并从中提取模式。您还可以将文件提交到版本控制并将其放入s3存储桶中。

这类似于以下问题:您可以使用KafkaUtils.createRDD从Kafka获取非流式RDD