创建DataFrame遇到的问题
来源:互联网 发布:js让多个功能延迟执行 编辑:程序博客网 时间:2024/05/21 00:44
sparkSQL的createDataFrame提供了多种重载方法,我使用了这两个:
createDataFrame(java.util.List<Row> rows, StructType schema) createDataFrame(JavaRDD<?> rdd, java.lang.Class<?> beanClass)
对于构造好的RDD:
val schemaString = "id name"val schema = StructType(schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true)))val rowRDD = lines.filter(_.length > 1).map(_.split(" ")).map(p => Row(p(0), p(1)))val dfCustomers = sqlContext.createDataFrame(rowRDD, schema)val df= dfCustomers.toDF()df.write.mode(SaveMode.Append).parquet("data.parquet")
这个比较简单,主要是schema的格式按照官网定义就可以。
对于传多行数据,如果顺序不固定的话,按照这个方法可能会出现错乱的问题,比如lines里边一行数据的顺序是id name 另一行是 name id的话处理好了之后两行数据就出问题了。鉴于此可以采用javabean的方式,定义javabean文件:
import java.io.Serializable;public class JavaBean implements Serializable { private static final long serialVersionUID = 1L; private String id= ""; public String getId() { return id; } public void setId(String id) { this.id = id; } public void yourCommonMethod(){ //定义你自己的逻辑,保证数据正确处理 }
由于对javabean文件应该有的格式理解的不是很透彻,导致遇到一些问题,有几点:
1.Serializable 接口
2.属性,getter,setter方法一定要有
3.自定义的方法不要是get和set开头
scala 定义的方式:
import scala.beans.BeanPropertyclass ScalaBean { @BeanProperty var id:String = null def yourCommonMethod():Unit={ //定义你自己的逻辑,保证数据正确处理 }
保证自定义方法不要有get和set开头
如果bean文件出现问题,会在主函数调用的
val df = sqlContext.createDataFrame(javaRdd,new ScalaBean().getClass)
这句出现
Exception in thread "main" java.lang.NullPointerException at org.spark-project.guava.reflect.TypeToken.method(TypeToken.java:465) at org.apache.spark.sql.catalyst.JavaTypeInference$$anonfun$2.apply(JavaTypeInference.scala:110)at org.apache.spark.sql.catalyst.JavaTypeInference$$anonfun$2.apply(JavaTypeInference.scala:109) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108) at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:108) at org.apache.spark.sql.catalyst.JavaTypeInference$.org$apache$spark$sql$catalyst$JavaTypeInference$$inferDataType(JavaTypeInference.scala:109) at org.apache.spark.sql.catalyst.JavaTypeInference$.inferDataType(JavaTypeInference.scala:54) at org.apache.spark.sql.SQLContext.getSchema(SQLContext.scala:941) at org.apache.spark.sql.SQLContext.createDataFrame(SQLContext.scala:572) at com.ys.SparkDemo0$.main(Test.scala:110) at com.ys.SparkDemo0.main(Test.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)16/11/24 17:37:26 INFO SparkContext: Invoking stop() from shutdown hook
搞得措手不及。
0 0
- 创建DataFrame遇到的问题
- Spark DataFrame简述和遇到的问题
- Pandas 创建空的DataFrame
- 创建maven遇到的问题
- malloc创建遇到的问题
- 快捷方式创建遇到的问题
- DataFrame排序sort的问题
- python的DataFrame排序问题
- python的dataframe与series的创建
- 遇到的CreateProcess 创建进程注入DLL遇到的问题
- 创建“维护计划”时遇到的问题
- 创建视图时遇到的问题
- 创建“维护计划”时遇到的问题
- 创建表格中遇到的问题
- 创建ASM disk时遇到的问题!
- 创建oracle数据库时遇到的问题
- win32创建对话框遇到的各种问题
- 创建线程遇到的一些问题记录
- opengl与d3d产生或填入mipmap参数不同之处
- 高并发量网站解决方案
- ThreadLocal--线程独自共享变量
- Hexo 百度提交链接
- HTTP学习计划(web的基础)--HTTP概述(1/2)
- 创建DataFrame遇到的问题
- RecyclerView专家
- hdu 1698 Just a Hook
- sap hana backup issue
- ubuntu 14.04 挂载 nfs
- 大风歌
- #424 – 使ListBox 中每一项保持一致大小(Getting Data-Bound Items in a ListBox to Be a Consistent Size)
- java ArrayList与LinkedList的普通for循环遍历
- JSON 字符串 与 java 对象的转换