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