Apache spark 这是Spark 1.3中的回归错误吗?

Apache spark 这是Spark 1.3中的回归错误吗?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,在spark SQL 1.2.1中没有弃用警告的情况下,以下代码在1.3中停止工作 在1.2.1中使用(没有任何弃用警告) 在1.3.0中停止工作(根本不编译,我所做的只是更改为1.3) 不工作的解决方法: 虽然这可能会给我一个RDD[行]: jsonResult.rdd.zipWithUniqueId() 现在这将不起作用,因为RDD[Row]当然没有registerTempTable方法 foo.registerTempTable("...") 以下是我的问题 有解决办法吗

在spark SQL 1.2.1中没有弃用警告的情况下,以下代码在1.3中停止工作

在1.2.1中使用(没有任何弃用警告)

在1.3.0中停止工作(根本不编译,我所做的只是更改为1.3)

不工作的解决方法:

虽然这可能会给我一个RDD[行]:

jsonResult.rdd.zipWithUniqueId()  
现在这将不起作用,因为
RDD[Row]
当然没有
registerTempTable
方法

     foo.registerTempTable("...")
以下是我的问题

  • 有解决办法吗?(例如,我只是做错了吗?)
  • 这是虫子吗?(我认为任何停止编译在以前版本中工作的东西,如果没有@deprecated警告,显然是一个回归bug)

  • 这不是一个错误,但很抱歉造成混乱!在Spark 1.3之前,Spark SQL一直被标记为Alpha组件,因为API仍在不断变化。我们使用Spark 1.3升级并稳定API。有关移植时需要执行的操作的完整说明,请参阅

    我还可以回答你们的具体问题,并就我们为什么做出这些改变给出一些理由

    在1.3.0中停止工作(只是没有编译,我所做的只是更改为1.3)
    jsonResult.zipWithUniqueId()//因为RDDApi没有实现该方法

    数据帧现在是跨Scala和Java的统一接口。但是,由于我们必须在1.X的其余部分保持与现有RDDAPI的兼容性,
    DataFrames
    不是
    RDD
    s。要获取RDD表示,可以调用
    df.RDD
    df.javaRDD

    此外,由于我们担心隐式转换可能会出现一些混乱,因此必须显式调用
    rdd.toDF
    ,以实现从rdd的转换。但是,只有当RDD持有从
    产品
    继承的对象(即元组或case类)时,此转换才会自动工作

    回到原来的问题,如果要对具有任意模式的行进行转换,则需要在映射操作之后显式地告诉Spark SQL有关数据结构的信息(因为编译器不能这样做)


    谢谢我想我应该先看一下手册;)
    jsonResult.rdd.zipWithUniqueId()  
    
         foo.registerTempTable("...")
    
    import org.apache.spark.sql.types._
    val jsonData = sqlContext.jsonRDD(sc.parallelize("""{"name": "Michael", "zip": 94709}""" :: Nil))
    val newSchema = 
      StructType(
        StructField("uniqueId", IntegerType) +: jsonData.schema.fields)
    
    val augmentedRows = jsonData.rdd.zipWithUniqueId.map { 
      case (row, id) =>
        Row.fromSeq(id +: row.toSeq)
    }
    
    val newDF = sqlContext.createDataFrame(augmentedRows, newSchema)