Вам необходимо объединить два dataframes
и применить UDF
для очистки и расчета значений акций:
//UDF to remove % from the share columns & calculate the final value
sqlContext.udf().register("valueUDF", (UDF2<String, Integer, Double>) (share, value) -> {
Double sharePercent = Double.valueOf(share.replace("%", ""))/100;
return value * sharePercent;
}, DataTypes.DoubleType);
//join two dfs & apply the UDF on the same columns
Dataset<Row> result = df2.join(df1, "Name")
.withColumn("Share1", callUDF("valueUDF", col("Share1"), col("Value")))
.withColumn("Share2", callUDF("valueUDF", col("Share2"), col("Value")))
.drop("Value");
result.show();
Вывод:
+----+------+------+
|Name|Share1|Share2|
+----+------+------+
| abc| 50.0| 50.0|
| def| 50.0| 150.0|
| xyz| 0.0| 500.0|
+----+------+------+