如何收集流数据集(到Scala值)?

时间:2019-01-08 23:38:44

标签: apache-spark spark-structured-streaming

如何将数据帧值存储到scala变量?

我需要将以下数据帧中的值(假设列“ timestamp”列产生相同的值)存储到变量中,然后在某个地方使用此变量

我尝试关注

   val spark =SparkSession.builder().appName("micro").
   enableHiveSupport().config("hive.exec.dynamic.partition", "true").
   config("hive.exec.dynamic.partition.mode", "nonstrict").
   config("spark.sql.streaming.checkpointLocation", "hdfs://dff/apps/hive/warehouse/area.db").
   getOrCreate()

   val xmlSchema = new StructType().add("id", "string").add("time_xml", "string")
   val xmlData = spark.readStream.option("sep", ",").schema(xmlSchema).csv("file:///home/shp/sourcexml") 
   val xmlDf_temp = xmlData.select($"id",unix_timestamp($"time_xml", "dd/mm/yyyy HH:mm:ss").cast(TimestampType).as("timestamp"))
   val collect_time = xmlDf_temp.select($"timestamp").as[String].collect()(0)

出现以下错误:

  

org.apache.spark.sql.AnalysisException:具有流源的查询必须使用writeStream.start()

执行

有什么方法可以将一些数据帧值存储到变量中并在以后使用?

1 个答案:

答案 0 :(得分:1)

  

有什么方法可以将一些数据帧值存储到变量中并在以后使用?

在Spark结构化流中这是不可能的,因为流查询永远不会结束,因此无法表达collect

  

后来我需要在某个地方使用此变量

此“稍后”必须是另一个流查询,您可以join一起生成结果。