Scala 为什么foreachRDD不使用StreamingContext.textFileStream用新内容填充DataFrame?
我的问题是,当我将代码更改为流模式并将数据帧放入foreach循环时,数据帧显示为空表!我没有填满!我也无法将其放入assembler.transform()。错误是:Scala 为什么foreachRDD不使用StreamingContext.textFileStream用新内容填充DataFrame?,scala,apache-spark,apache-spark-sql,spark-streaming,apache-spark-mllib,Scala,Apache Spark,Apache Spark Sql,Spark Streaming,Apache Spark Mllib,我的问题是,当我将代码更改为流模式并将数据帧放入foreach循环时,数据帧显示为空表!我没有填满!我也无法将其放入assembler.transform()。错误是: Error:(38, 40) not enough arguments for method map: (mapFunc: String => U)(implicit evidence$2: scala.reflect.ClassTag[U])org.apache.spark.streaming.dstream.DStre
Error:(38, 40) not enough arguments for method map: (mapFunc: String => U)(implicit evidence$2: scala.reflect.ClassTag[U])org.apache.spark.streaming.dstream.DStream[U].
Unspecified value parameter mapFunc.
val dataFrame = Train_DStream.map()
我的train.csv文件如下所示:
请帮帮我。
这是我的密码:
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.{LabeledPoint, StreamingLinearRegressionWithSGD}
import org.apache.spark.sql.types.{StringType, StructField, StructType}
import org.apache.spark.sql.{Row, SQLContext}
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext}
import scala.util.Try
/**
* Created by saeedtkh on 5/22/17.
*/
object ML_Test {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setMaster("local").setAppName("HdfsWordCount")
val sc = new SparkContext(sparkConf)
// Create the context
val ssc = new StreamingContext(sc, Seconds(10))
val sqlContext = new SQLContext(sc)
val customSchema = StructType(Array(
StructField("column0", StringType, true),
StructField("column1", StringType, true),
StructField("column2", StringType, true)))
//val Test_DStream = ssc.textFileStream("/Users/saeedtkh/Desktop/sharedsaeed/train.csv").map(LabeledPoint.parse)
val Train_DStream = ssc.textFileStream("/Users/saeedtkh/Desktop/sharedsaeed/train.csv")
val DStream =Train_DStream.map(line => line.split(">")).map(array => {
val first = Try(array(0).trim.split(" ")(0)) getOrElse ""
val second = Try(array(1).trim.split(" ")(6)) getOrElse ""
val third = Try(array(2).trim.split(" ")(0).replace(":", "")) getOrElse ""
Row.fromSeq(Seq(first, second, third))
})
DStream.foreachRDD { Test_DStream =>
val dataFrame = sqlContext.createDataFrame(Test_DStream, customSchema)
dataFrame.groupBy("column1", "column2").count().show()
val numFeatures = 3
val model = new StreamingLinearRegressionWithSGD()
.setInitialWeights(Vectors.zeros(numFeatures))
val featureCol = Array("column1", "column2")
val assembler=new VectorAssembler().setInputCols(featureCol).setOutputCol("features")
dataFrame.show()
val df_new=assembler.transform(dataFrame)
}
ssc.start()
ssc.awaitTermination()
}
}
我猜/Users/saeedtkh/Desktop/sharedsaeed/train.csv
目录下的所有文件都已处理完毕,因此没有剩下任何文件,因此数据框为空
请注意,的唯一输入参数是目录而不是文件
textFileStream(目录:String):DStream[String]创建一个输入流,用于监视与Hadoop兼容的文件系统中的新文件并将其作为文本文件读取
还请注意,一旦在Spark Streaming应用程序中处理了文件,则不应更改(或附加)该文件,因为该文件已标记为已处理,Spark Streaming将忽略任何修改
引用Spark Streaming的官方文档:
Spark Streaming将监视目录dataDirectory
,并处理在该目录中创建的任何文件(不支持在嵌套目录中写入的文件)。
注意
- 这些文件必须具有相同的数据格式
- 必须通过将文件自动移动或重命名到数据目录中,在dataDirectory中创建这些文件
- 一旦移动,文件不得更改。因此,如果连续追加文件,则不会读取新数据
streamingContext.textFileStream(dataDirectory)
。文件流不需要运行接收器,因此不需要分配核心
还请将
setMaster(“local”)
替换为setMaster(“local[*])
,以确保您的Spark Streaming应用程序将有足够的线程来处理传入数据(您必须至少有2个线程).我猜/Users/saeedtkh/Desktop/sharedsaeed/train.csv
目录下的所有文件都已处理完毕,因此没有留下任何文件,因此数据框为空
请注意,的唯一输入参数是目录而不是文件
textFileStream(目录:String):DStream[String]创建一个输入流,用于监视与Hadoop兼容的文件系统中的新文件并将其作为文本文件读取
还请注意,一旦在Spark Streaming应用程序中处理了文件,则不应更改(或附加)该文件,因为该文件已标记为已处理,Spark Streaming将忽略任何修改
引用Spark Streaming的官方文档:
Spark Streaming将监视目录dataDirectory
,并处理在该目录中创建的任何文件(不支持在嵌套目录中写入的文件)。
注意
- 这些文件必须具有相同的数据格式
- 必须通过将文件自动移动或重命名到数据目录中,在dataDirectory中创建这些文件
- 一旦移动,文件不得更改。因此,如果连续追加文件,则不会读取新数据
streamingContext.textFileStream(dataDirectory)
。文件流不需要运行接收器,因此不需要分配核心
还请将
setMaster(“local”)
替换为setMaster(“local[*])
,以确保您的Spark Streaming应用程序将有足够的线程来处理传入数据(您必须至少有2个线程)。那么为什么transform()不能与我的数据帧一起工作呢?这给了我一个错误。错误是有疑问的。非常有用和完整的答案!那么为什么transform()不能处理我的数据帧呢?这给了我一个错误。错误是有疑问的。非常有用和完整的答案!Spark的版本是什么?/Users/saeedtkh/Desktop/sharedsaeed/train.csv
看起来怎么样?这是目录还是文件?你从dataFrame.show()中得到了什么?@JacekLaskowski:我用的是2.11.2.Let.Spark版本是什么?用户/saeedtkh/Desktop/sharedsaeed/train.csv看起来怎么样?这是目录还是文件?你从dataFrame.show()中得到了什么?@JacekLaskowski:我使用2.11.2。