Java 如何从包含列表对象的RDD创建数据帧?
我想知道是否有可能从包含单个列表的类的JavaRDD创建数据帧 例如,为包含以下DataRecord类对象的RDD创建数据帧:Java 如何从包含列表对象的RDD创建数据帧?,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,我想知道是否有可能从包含单个列表的类的JavaRDD创建数据帧 例如,为包含以下DataRecord类对象的RDD创建数据帧: public class DataRecord implements Serializable{ private List<Object> values; public DataRecord(List<Object> values){ this.values = values; } } 公共类D
public class DataRecord implements Serializable{
private List<Object> values;
public DataRecord(List<Object> values){
this.values = values;
}
}
公共类DataRecord实现可序列化{
私有列表值;
公共数据记录(列表值){
这个值=值;
}
}
遵循想法(不起作用)
JavaRDD rdd=sc.textFile(“hdfs/…”)。
.map(新函数(){
@凌驾
公共DataRecord调用(字符串行)引发异常{
String[]fields=line.split(“,”);
列表值=新的ArrayList();
对于(int i=0;i实际上,没有一列,csv的使用也是错误的,因为列“不同”Row1:2015-10-05 ErrorID=1 testrun=fail Row2:2015-10-05 ErrorID=NULL,所以我想从具有不同列表的数据记录中获得一个数据帧。但是,我最终筛选了数据帧,并将其拆分为不同的数据帧,其中每个df只包含具有相同列的行。我想这对我来说是可行的。抱歉,我实际上错过了Object
part。这需要在DataRecord的适当getter和setter之上使用UDT。实际上,没有一个列,而且csv的使用也是错误的,因为列“不同”Row1:2015-10-05 ErrorID=1 testrun=fail Row2:2015-10-05 ErrorID=NULL,所以我想从具有不同列表的数据记录中获得一个数据帧。但是,我最终筛选了数据帧,并将其拆分为不同的数据帧,其中每个df只包含具有相同列的行。我想这对我来说是可行的。抱歉,我实际上错过了Object
part。这将需要在DataRecord的适当getter和setter之上使用UDT。
JavaRDD<String> rdd= sc.textFile("hdfs//...").
.map( new Function<String, DataRecord>(){
@Override
public DataRecord call(String line) throws Exception{
String[] fields = line.split(",");
List<Object> values = new ArrayList<Object>();
for(int i=0; i<fields.length; i++){
values.add(field[i]);
}
return new DataRecord(values);
});
DataFrame schemaLogMessages = sqlContext.createDataFrame(rdd, DataRecord.class); //Does not work
schemaLogMessages.registerTempTable("rdd");
DataFrame df = sqlContext.sql("SELECT * FROM rdd");