在Java中的Apache Spark 1.4中向数据帧追加一列
我正在尝试向我的数据框中添加一个列,作为该列的唯一行ID。所以,应该是这样的 1,用户1 2,用户2 3,用户3 ... 我本可以使用带有整数迭代的hashMap轻松完成这项工作,但我不能在spark中使用DataFrame上的map函数,因为我不能在map函数中增加整数。是否有任何方法可以通过将一列附加到现有数据帧或任何其他方法来实现这一点? PS:我知道有一个非常复杂的问题,但这是针对Scala的,而不是java的在Java中的Apache Spark 1.4中向数据帧追加一列,java,apache-spark,Java,Apache Spark,我正在尝试向我的数据框中添加一个列,作为该列的唯一行ID。所以,应该是这样的 1,用户1 2,用户2 3,用户3 ... 我本可以使用带有整数迭代的hashMap轻松完成这项工作,但我不能在spark中使用DataFrame上的map函数,因为我不能在map函数中增加整数。是否有任何方法可以通过将一列附加到现有数据帧或任何其他方法来实现这一点? PS:我知道有一个非常复杂的问题,但这是针对Scala的,而不是java的 提前感谢好的,我找到了这个问题的解决方案,我正在发布它,以防有人遇到同样的问
提前感谢好的,我找到了这个问题的解决方案,我正在发布它,以防有人遇到同样的问题: 实现这一点的方法是从JavaRDD()中zipWithIndex
df.javaRDD().zipWithIndex().map(新函数(){
@凌驾
公用行调用(tuple2v1)引发异常{
返回RowFactory.create(v1._1().getString(0),v1._2());
}
})
我是通过在DataFrame的一个新列中添加一个包含UUID的列来实现的
StructType objStructType = inputDataFrame.schema();
StructField []arrStructField=objStructType.fields();
List<StructField> fields = new ArrayList<StructField>();
List<StructField> newfields = new ArrayList<StructField>();
List <StructField> listFields = Arrays.asList(arrStructField);
StructField a = DataTypes.createStructField(leftCol,DataTypes.StringType, true);
fields.add(a);
newfields.addAll(listFields);
newfields.addAll(fields);
final int size = objStructType.size();
JavaRDD<Row> rowRDD = inputDataFrame.javaRDD().map(new Function<Row, Row>() {
private static final long serialVersionUID = 3280804931696581264L;
public Row call(Row tblRow) throws Exception {
Object[] newRow = new Object[size+1];
int rowSize= tblRow.length();
for (int itr = 0; itr < rowSize; itr++)
{
if(tblRow.apply(itr)!=null)
{
newRow[itr] = tblRow.apply(itr);
}
}
newRow[size] = UUID.randomUUID().toString();
return RowFactory.create(newRow);
}
});
inputDataFrame = objsqlContext.createDataFrame(rowRDD, DataTypes.createStructType(newfields));
StructType objStructType=inputDataFrame.schema();
StructField[]arrStructField=objStructType.fields();
列表字段=新的ArrayList();
List newfields=newarraylist();
List listFields=Arrays.asList(arrcstructfield);
StructField a=DataTypes.createStructField(leftCol,DataTypes.StringType,true);
字段。添加(a);
newfields.addAll(列表字段);
newfields.addAll(字段);
final int size=objStructType.size();
JavaRDD rowRDD=inputDataFrame.JavaRDD().map(新函数(){
私有静态最终长serialVersionUID=3280804931696581264L;
公用行调用(行tblRow)引发异常{
Object[]newRow=新对象[size+1];
int rowSize=tblRow.length();
对于(int-itr=0;itr
谢谢!,在spark 2@Harish有更好的方法吗