scala – 如何使用toDF()将自定义Java类对象的RDD转换为DataFram
发布时间:2020-12-16 18:37:09 所属栏目:安全 来源:网络整理
导读:我试图使用toDF()将Spark RDD转换为Spark SQL数据帧.我已成功多次使用此函数,但在这种情况下,我收到编译器错误: error: value toDF is not a member of org.apache.spark.rdd.RDD[com.example.protobuf.SensorData] 这是我的代码如下: // SensorData is an
我试图使用toDF()将Spark RDD转换为Spark SQL数据帧.我已成功多次使用此函数,但在这种情况下,我收到编译器错误:
error: value toDF is not a member of org.apache.spark.rdd.RDD[com.example.protobuf.SensorData] 这是我的代码如下: // SensorData is an auto-generated class import com.example.protobuf.SensorData def loadSensorDataToRdd : RDD[SensorData] = ??? object MyApplication { def main(argv: Array[String]): Unit = { val conf = new SparkConf() conf.setAppName("My application") conf.set("io.compression.codecs","com.hadoop.compression.lzo.LzopCodec") val sc = new SparkContext(conf) val sqlContext = new org.apache.spark.sql.SQLContext(sc) import sqlContext.implicits._ val sensorDataRdd = loadSensorDataToRdd() val sensorDataDf = sensorDataRdd.toDF() // <-- CAUSES COMPILER ERROR } } 我猜测问题出在SensorData类上,这是一个从Protocol Buffer自动生成的Java类.为了将RDD转换为数据帧,我该怎么办? 解决方法
编译错误的原因是,范围内没有编码器将带有com.example.protobuf.SensorData的RDD转换为com.example.protobuf.SensorData的数据集.
编码器(确切地说,ExpressionEncoders)用于根据模式(通常是案例类或Java bean)将InternalRow对象转换为JVM对象. 希望您可以使用org.apache.spark.sql.Encoders对象的bean方法为自定义Java类创建一个Encoder.
类似于以下内容: import org.apache.spark.sql.Encoders implicit val SensorDataEncoder = Encoders.bean(classOf[com.example.protobuf.SensorData]) 如果SensorData使用不支持的类型,则必须将RDD [SensorData]映射到某些更简单类型的RDD,例如,一个字段的元组,然后才期望到DF工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Remoting与webservice区别
- scala – 如何在Future和Thread.sleep示例中使用spray.io实
- 在supportedSASLMechanisms中将GSSAPI添加到OpenLdap
- 单位测试 – 错误:不可分配的模型表达式:未定义
- bootstrap-表格-条纹状表格
- 如何将Scala Spark DataFrames架构导出到Json文件?
- angularjs google maps – 带窗口的标记 – infowindow不显
- angularjs – Angular ui-router:ui-views vs directives?
- Scala如何使用Map将方法存储为值
- WebService使用代理类调用远程接口