Apache Spark-需要根据结果元数据映射动态实施



我有一个用例,我需要在已经加载的数据上进行一些数据校正。启用元数据在一个colfamily下的逻辑主键在HBase中,并且在另一个列族下进行了柱子。假设我有一个带有单个记录的过滤数据框,我需要为其进行更新(使用Spark SQL过滤(Colnames&Colvalues位于Java地图中。我知道我们可以使用Colunmm Inorder申请更新或向现有DF添加新的COL,但是在这种情况下,我需要根据我的元数据(即我的元数据,即Cols of Cols of Cols for for cols of Collumn(数据需要纠正。我不能通过迭代地图在for循环中进行此操作,因为数据范围是不可变的,也不鼓励我使用开关案例。此外,也有不应使用Scala API的限制。

Dataset<Row> existingdata = sparksession.read
      .format(com.databricks.spark.avro)
      .load(myhdfslocation);
Map<byte[],byte[]> colUpdates = result.getFamily("TK")//result of hbase get
Set<byte[]> colUpdateKeys = colUpdates.keySet();
for(byte[] eachkey : colUpdateKeys ){
    Dataset<Row> updatedDF =  
             existingdata.withColumn(
                existingdata.col(Bytes.toString(eachkey)),
                "value from themetadatamap"
             );
}

到目前为止,我有两种方法是使用开关情况(这不是最佳的方法火花加入以获取所得数据集。如果有人可以建议实施此用途酶的最佳方法,这真的很有帮助。:(

尽管您无法突变数据框架,但您可以更新引用的变量: - (

for(byte[] eachkey : colUpdateKeys ){
    existingdata =  
             existingdata.withColumn(
                existingdata.col(Bytes.toString(eachkey)),
                "value from themetadatamap"
             );
}

这将用谱系中最新数据框的值覆盖existingdata变量,以使循环后existingdata具有所有列。

最新更新