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
Scala Spark Map数据帧缺少参数类型_Scala_Apache Spark - Fatal编程技术网

Scala Spark Map数据帧缺少参数类型

Scala Spark Map数据帧缺少参数类型,scala,apache-spark,Scala,Apache Spark,我不太熟悉Spark,在映射数据帧时收到错误 我有一个数据流,我想用一个sql数据框来过滤数据。代码如下所示: val textDStream = ssc.textFileStream(inputPath) val activityStream = textDStream.transform(input => { input.flatMap { line => val record = line.split("\\t") Some(Activi

我不太熟悉Spark,在映射数据帧时收到错误

我有一个数据流,我想用一个sql数据框来过滤数据。代码如下所示:

  val textDStream = ssc.textFileStream(inputPath)
  val activityStream = textDStream.transform(input => {
    input.flatMap { line =>
      val record = line.split("\\t")
      Some(Activity(record(0).toLong / MS_IN_HOUR * MS_IN_HOUR, record(1), record(2), record(3), record(4), record(5), record(6)))
      }
  })

activityStream.transform(rdd => {

    val df = rdd.toDF()

    df.registerTempTable("activity")
    val activityByProduct = sqlContext.sql("""SELECT
                                        product,
                                        timestamp_hour,
                                        sum(case when action = 'purchase' then 1 else 0 end) as purchase_count,
                                        sum(case when action = 'add_to_cart' then 1 else 0 end) as add_to_cart_count,
                                        sum(case when action = 'page_view' then 1 else 0 end) as page_view_count
                                        from activity
                                        group by product, timestamp_hour """)

    activityByProduct
      .map { r => ((r.getString(0), r.getLong(1)),
        ActivityByProduct(r.getString(0), r.getLong(1), r.getLong(2), r.getLong(3), r.getLong(4))
        )}

  }).print()
这里的问题是,我收到以下错误:

错误:(58,18)缺少参数类型 .map{r=>((r.getString(0),r.getLong(1))

我看不到类型丢失的位置。我已经尝试显式地设置r=>type。但是它继续返回错误

可能是什么

提前感谢

成功了

在执行映射之前,我必须将数据帧转换为rdd:

activityByProduct.rdd
      .map { r =>
        ((r.getString(0), r.getLong(1)),
        ActivityByProduct(r.getString(0), r.getLong(1), r.getLong(2), r.getLong(3), r.getLong(4))
        )}
在activityByProduct运行之后查看.rdd

在执行映射之前,我必须将数据帧转换为rdd:

activityByProduct.rdd
      .map { r =>
        ((r.getString(0), r.getLong(1)),
        ActivityByProduct(r.getString(0), r.getLong(1), r.getLong(2), r.getLong(3), r.getLong(4))
        )}

查看activityByProduct后面的.rdd是的,这是有效的。如果它必须工作,您需要将其转换为rdd。它在以前的Spark版本中运行良好,但在2.12及以上版本中,您将需要它。

是的,这是有效的。如果它必须工作,您需要将其转换为rdd。它在以前的Spark版本中运行良好,但在2.12及abo中运行良好你需要这个。

你好,我也遇到了同样的问题。 当我在代码的下一行添加导入hiveCtx.IMPLITS.\u代码
val hiveCtx=new HiveContext(sc)
时,错误被删除。因为此代码将RDD隐式转换为数据帧。 希望能帮助你

package spark.sparkSQL

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext

object sparksql2 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("sparksql").setMaster("local")
    val sc = new SparkContext(conf)
    sc.setLogLevel("ERROR")

    val hiveCtx = new HiveContext(sc)
    import hiveCtx.implicits._        //  ImportType(hiveCtx.implicits)

    val input = hiveCtx.jsonFile("./inputFile")
    // Register the input schema RDD
    input.registerTempTable("tweets")
    hiveCtx.cacheTable("tweets")
    // Select tweets based on the retweetCount
    val topTweets = hiveCtx.sql("SELECT text, retweetCount FROM tweets ORDER BY retweetCount LIMIT 10")
    topTweets.collect().map(println(_))
    val topTweetText = topTweets.map(row => row.getString(0))
  }
}
下面是完整的代码,希望能对您有所帮助

package spark.sparkSQL

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext

object sparksql2 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("sparksql").setMaster("local")
    val sc = new SparkContext(conf)
    sc.setLogLevel("ERROR")

    val hiveCtx = new HiveContext(sc)
    import hiveCtx.implicits._        //  ImportType(hiveCtx.implicits)

    val input = hiveCtx.jsonFile("./inputFile")
    // Register the input schema RDD
    input.registerTempTable("tweets")
    hiveCtx.cacheTable("tweets")
    // Select tweets based on the retweetCount
    val topTweets = hiveCtx.sql("SELECT text, retweetCount FROM tweets ORDER BY retweetCount LIMIT 10")
    topTweets.collect().map(println(_))
    val topTweetText = topTweets.map(row => row.getString(0))
  }
}

你好,我也遇到了与你相同的问题。 当我在代码的下一行添加导入hiveCtx.IMPLITS.\u代码
val hiveCtx=new HiveContext(sc)
时,错误被删除。因为此代码将RDD隐式转换为数据帧。 希望能帮助你

package spark.sparkSQL

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext

object sparksql2 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("sparksql").setMaster("local")
    val sc = new SparkContext(conf)
    sc.setLogLevel("ERROR")

    val hiveCtx = new HiveContext(sc)
    import hiveCtx.implicits._        //  ImportType(hiveCtx.implicits)

    val input = hiveCtx.jsonFile("./inputFile")
    // Register the input schema RDD
    input.registerTempTable("tweets")
    hiveCtx.cacheTable("tweets")
    // Select tweets based on the retweetCount
    val topTweets = hiveCtx.sql("SELECT text, retweetCount FROM tweets ORDER BY retweetCount LIMIT 10")
    topTweets.collect().map(println(_))
    val topTweetText = topTweets.map(row => row.getString(0))
  }
}
下面是完整的代码,希望能对您有所帮助

package spark.sparkSQL

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext

object sparksql2 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("sparksql").setMaster("local")
    val sc = new SparkContext(conf)
    sc.setLogLevel("ERROR")

    val hiveCtx = new HiveContext(sc)
    import hiveCtx.implicits._        //  ImportType(hiveCtx.implicits)

    val input = hiveCtx.jsonFile("./inputFile")
    // Register the input schema RDD
    input.registerTempTable("tweets")
    hiveCtx.cacheTable("tweets")
    // Select tweets based on the retweetCount
    val topTweets = hiveCtx.sql("SELECT text, retweetCount FROM tweets ORDER BY retweetCount LIMIT 10")
    topTweets.collect().map(println(_))
    val topTweetText = topTweets.map(row => row.getString(0))
  }
}

你的
.map()
返回什么?如果是一个元组(Tuple,?),那么你需要更多的参数。什么是
活动副产品
?事实上,我返回的是一个元组(key,ActivityByProduct)。其中key=(product,timestamp_hour)=(r.getString(0),r.getLong(1)此键用于状态完整操作我已更改为activityByProduct.map{r=>{val key=(r.getString(0),r.getLong(1))val activity=activityByProduct(r.getString(0),r.getLong(1),r.getLong(2),r.getLong(3),r.getLong(4))ActivityFull(键,活动)}它返回相同的错误ActivityByProduct是一个case类,所以您尝试过:
.map[((字符串,Long),ActivityByProduct)]{r=>..
?您的
.map()
返回什么?如果它是一个元组(Tuple),那么您需要更多的paren。什么是
ActivityByProduct
?事实上,我返回的是一个元组(key,ActivityByProduct)。其中key=(product,timestamp_hour)=(r.getString(0),r.getLong(1)此键用于状态操作我已更改为activityByProduct.map{r=>{val key=(r.getString(0),r.getLong(1))val activity=activityByProduct(r.getString(0),r.getLong(1),r.getLong(2),r.getLong(3),r.getLong(4))ActivityFull(key,activity)}返回相同的错误ActivityByProduct是一个case类,因此您尝试了:
.map[((字符串,长),ActivityByProduct)]{r=>…
?奇怪。根据Dataframe API文档,它应该直接支持.map。Spark的哪个版本?不,这是正常的,Dataframe需要一个强大的模式定义才能工作。奇怪。根据Dataframe API文档,它应该直接支持.map。Spark的哪个版本?不,这是正常的,Dataframe需要一个强大的模式定义才能工作。