如何基于JSON文件中存在的源列进行目标DF列映射

时间:2018-08-17 13:51:32

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

我有一个JSON文件,其中包含源到目标列的映射。以下是JSON文件示例

{
  "dt": [
    {
      "dtType": "CommonModel",
      "filter": {
        "fileFilter": [
          "*_AE_*.csv"
        ]
      },
      "operation": [
        {
          "targetColumn": "columnNameX",
          "sourceColumn": [
            "srcColumnX",
            "srcColumnY",
            "srcColumnZ",
            "...."
          ]
        },
        {
          "targetColumn": "columnNameY",
          "sourceColumn": [
            "srcColumnY"
          ]
        },
        {
          "targetColumn": "columnNameY",
          "selectvalue": 5
        }
      ]
    },
    {
      "dtType": "CommonModel",
      "filter": {
        "fileFilter": [
          "*ENRL*.csv"
        ]
      },
      "operation": [
        {
          "targetColumn": "columnNameX",
          "sourceColumn": [
            "srcColumnX",
            "srcColumnY"
          ]
        },
        {
          "targetColumn": "columnNameY",
          "sourceColumn": [
            "srcColumnY"
          ]
        }
      ]
    }
  ]
}

根据上述JSON文件,我在JSON的fileFilter标记下具有文件名,目标列和源列,因此根据JSON,我想创建一个目标DF,其中包含JSON中提到的所有targetColumn和值目标列的数量取决于条件,条件是它将首先过滤所有包含 AE (来自“ fileFilter”:[“ _AE _ .csv” ]的名称),然后将检查JSON中的sourceColumn标记,因此根据JSON第1个源列具有数组,这意味着它将检查所有过滤文件中此数组的第1个元素,即数组的第1个列名称存在于任何已过滤文件中,它将将此列值映射到目标DF的columnNameX,否则它将检查下一个列(srcColumnY(数组的第二个元素)),依此类推,如果在这种情况下没有列找到任何已过滤文件目标列的值将为null。同样的算法也在下一个目标列上运行。注意:-根据第三个目标列(columnNameZ)的JSON,selectvalue存在5,因此在这种情况下,目标列将填充为硬编码5。

此过程也将继续处理下一个文件(“ fileFilter”:[“ ENRL .csv”]),这意味着如果文件名包含ENRL,则它将仅过滤那些文件,并且将按照上述算法在同一目标DF中进行源到目标的映射。

任何帮助将不胜感激。如果您有任何疑问,请告诉我。

0 个答案:

没有答案