gpt4 book ai didi

java - 在 Java 中将一列附加到 Apache Spark 1.4 中的数据框

转载 作者:行者123 更新时间:2023-11-30 06:12:44 25 4
gpt4 key购买 nike

我正在尝试向我的 DataFrame 添加一列,作为该列的唯一 ROW_ID。所以,它会是这样的1、用户12、用户23、用户3...我本可以使用带有整数迭代的 hashMap 轻松完成此操作,但我无法使用 DataFrame 上的 map 函数在 spark 中执行此操作,因为我不能在 map 函数中增加整数。有什么办法可以通过将一列附加到我现有的 DataFrame 或任何其他方式来做到这一点?PS:我知道有一个很similar post ,但那是针对 Scala 而不是 java。

提前致谢

最佳答案

我通过在 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));

关于java - 在 Java 中将一列附加到 Apache Spark 1.4 中的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32591007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com