如何使用列值以在Spark Scala中为withColumn生成另一列的名称

时间:2019-08-22 13:25:25

标签: json scala dataframe dynamic apache-spark-sql

我试图在读取json资源文件后生成数据帧。我的json文件包含相关属性,并且在使用withColumn时,我需要获取列值来创建另一个列名。

您可以在下面找到我现在正在做的事情:

val getInfo= df
      .withColumn("transactions", explode($"transactions"))//this is array
      .withColumn("id", $"transactions.data.profile.id")
      .withColumn("totalAmounts", explode($"transactions.data.activity.total"))
      .withColumn("amount", $"totalAmounts.amount")
      .withColumn("code", $"totalAmounts.code")
      .withColumn("category", $"totalAmounts.category")
      .withColumn("createdAt", $"transactions.data.meta.created.at")
      .withColumn("relatedDetails", explode($"transactions.data.related"))
      .withColumn("resourceId", $"relatedDetails.id")
      .withColumn("mainType", $"relatedDetails.type")
      .withColumn("subType", $"transactions.data.subType")
      .drop("transactions")
      .drop("totalAmounts")
      .drop("relatedDetails")
      .as[TransactionData]
      .toDF()

上面的代码对我来说还可以,但是json文件中有一个动态生成的属性。 当我要添加另一列“ transactionType”时,该列取决于“ resourceId”列的值。

我需要做的如下:

.withColumn("transactionType",$"transactions.included.transactionDetail.<<resourceId value>>.transactionType")  .

0 个答案:

没有答案