Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Spark Streaming使用Scala中的foreachRDD()将数据保存到MySQL_Mysql_Scala_Spark Streaming - Fatal编程技术网

Spark Streaming使用Scala中的foreachRDD()将数据保存到MySQL

Spark Streaming使用Scala中的foreachRDD()将数据保存到MySQL,mysql,scala,spark-streaming,Mysql,Scala,Spark Streaming,Spark Streaming使用Scala中的foreachRDD()将数据保存到MySQL 请给我一个关于在Scala中使用foreachRDD()将Spark流保存到MySQL数据库的函数示例。我有下面的代码,但它不工作。我只需要一个简单的例子,而不是理论 谢谢大家! package examples import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark._ import org.apache.s

Spark Streaming使用Scala中的
foreachRDD()
将数据保存到MySQL

请给我一个关于在Scala中使用
foreachRDD()
将Spark流保存到MySQL数据库的函数示例。我有下面的代码,但它不工作。我只需要一个简单的例子,而不是理论

谢谢大家!

package examples
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark._
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Seconds, StreamingContext}
import StreamingContext._
import org.apache.hadoop.io.Text
import org.apache.hadoop.io.LongWritable
import org.apache.hadoop.mapred.SequenceFileOutputFormat
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.hive.HiveContext
import java.util.Properties
import org.apache.spark.sql.SaveMode  
object StreamingToMysql {
  def main(args: Array[String]) {
    val sparkConf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[*]")
    val sc = new SparkContext(sparkConf) 
    val sqlContext = new SQLContext(sc)
    val hiveCtx= new HiveContext(sc)
    import hiveCtx.implicits._
    val ssc = new StreamingContext(sc, Seconds(1))
    val lines = ssc.socketTextStream("localhost", 9999)
    ssc.checkpoint("hdfs://localhost:54310/user/hduser/Streaming/logs")    
    val rdd = sc.parallelize(List(1))
    val df = rdd.toDF()
    val split = lines.map(line => line.split(",")  )
    val input = split.map(x => x(0))
    input.foreachRDD { rdd =>
                 if (rdd.take (1).size == 1) {
                     rdd.foreachPartition { iterator =>
                         iterator.foreach {
                          val connectionProperties = new Properties()
                          connectionProperties.put("user", "root")
                          connectionProperties.put("password", "admin123")
                          iterator.write.mode("append")
                        .jdbc("jdbc:mysql://192.168.100.8:3306/hadoopguide", "topics", connectionProperties) 
                         }
                 }
             }    
    }
    val connectionProperties = new Properties()
    connectionProperties.put("user", "root")
    connectionProperties.put("password", "admin123")
    df.write.mode("append")
  .jdbc("jdbc:mysql://192.168.100.8:3306/hadoopguide", "topics", connectionProperties)    
    println("Done")
    ssc.start()
    ssc.awaitTermination()      
  }   
}

要将数据从Spark Streaming写入外部系统,可以使用高级dataframes API或低级RDD。在上面的代码中,这两种方法是混合的,并且都可以工作

假设您知道Spark Streaming中传入数据的结构,您可以使用每个RDD创建一个数据帧,并使用Dataframe API保存它:

首先,为数据创建一个模式:

case class MyStructure(field: Type,....)
然后,将模式应用于传入流:

val structuredData = dstream.map(record => MyStructure(record.field1, ... record.fieldn))
现在使用
foreachRDD
将数据流中的每个RDD转换为数据帧,并使用DF API保存它:

// JDBC writer configuration
val connectionProperties = new Properties()
connectionProperties.put("user", "root")
connectionProperties.put("password", "*****")

structuredData.foreachRDD { rdd =>
  val df = rdd.toDF() // create a dataframe from the schema RDD      
  df.write.mode("append")                        
    .jdbc("jdbc:mysql://192.168.100.8:3306/hadoopguide", "topics", connectionProperties) 
}

你能加上你得到的错误吗?@RahulSharma你在说什么??这是火花,问题是通用的scala。请删除您的“可能重复”评论。