Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark pyspark更改数据捕获实现_Apache Spark_Pyspark_Apache Spark Sql_Change Data Capture - Fatal编程技术网

Apache spark pyspark更改数据捕获实现

Apache spark pyspark更改数据捕获实现,apache-spark,pyspark,apache-spark-sql,change-data-capture,Apache Spark,Pyspark,Apache Spark Sql,Change Data Capture,我有一个基表,它保存着实际的数据。以下是表格结构 身份证件 名称 地址 年龄 日期 A1 {“fname”:“Alex”,“lname”:“Bhatt”} {“巷”:“麦克街”、“公寓”:[“24”、“26”、“27”、“29”]} 56 20201128 A2 {“fname”:“Bob”,“lname”:“Natarajan”} {“巷”:“罗伊德街”,“公寓”:[“22”、“23”、“27”],“宾”:“123514”} 53 20201123 A1 {“fname”:“Alex”,“ln

我有一个基表,它保存着实际的数据。以下是表格结构

身份证件 名称 地址 年龄 日期 A1 {“fname”:“Alex”,“lname”:“Bhatt”} {“巷”:“麦克街”、“公寓”:[“24”、“26”、“27”、“29”]} 56 20201128 A2 {“fname”:“Bob”,“lname”:“Natarajan”} {“巷”:“罗伊德街”,“公寓”:[“22”、“23”、“27”],“宾”:“123514”} 53 20201123 A1 {“fname”:“Alex”,“lname”:“Bhattacharya”} {“巷”:“麦克街”、“公寓”:[“24”、“26”、“27”、“29”]} 56 20201228 A2 {“fname”:“Bob”,“lname”:“Natarajan”} {“巷”:“罗伊德街”,“公寓”:[“22”、“24”、“27”],“宾”:“123514”} 53 20201228
我认为您需要创建另一个json列,以便使用
get\u json\u object
。。。见下面我的答案

import pyspark.sql.functions as F

result = df1.select(
    'id',
    'date',
    F.to_json(
        F.struct(
            F.from_json('name', 'fname string, lname string').alias('name'),
            F.from_json('address', 'lane string, flat array<string>, pin string').alias('address')
        )
    ).alias('jsoncol')
).join(
    df2.withColumnRenamed('date', 'date2'), 'id'
).withColumn(
    'new_value',
    F.expr("get_json_object(jsoncol, '$.' || changed_field)")
).groupBy('id', 'changed_field').agg(
    F.array_sort(
        F.collect_list(
            F.array('date', 'new_value')
        )
    ).alias('values')
).select(
    'id',
    'changed_field',
    F.col('values')[1][1].alias('new_value'),
    F.col('values')[1][0].alias('newdate'),
    F.col('values')[0][1].alias('old_value'),
    F.col('values')[0][0].alias('olddate')
)

我认为您需要创建另一个json列,以便使用
get\u json\u object
。。。见下面我的答案

import pyspark.sql.functions as F

result = df1.select(
    'id',
    'date',
    F.to_json(
        F.struct(
            F.from_json('name', 'fname string, lname string').alias('name'),
            F.from_json('address', 'lane string, flat array<string>, pin string').alias('address')
        )
    ).alias('jsoncol')
).join(
    df2.withColumnRenamed('date', 'date2'), 'id'
).withColumn(
    'new_value',
    F.expr("get_json_object(jsoncol, '$.' || changed_field)")
).groupBy('id', 'changed_field').agg(
    F.array_sort(
        F.collect_list(
            F.array('date', 'new_value')
        )
    ).alias('values')
).select(
    'id',
    'changed_field',
    F.col('values')[1][1].alias('new_value'),
    F.col('values')[1][0].alias('newdate'),
    F.col('values')[0][1].alias('old_value'),
    F.col('values')[0][0].alias('olddate')
)

名称和地址列的数据类型是什么?StringType或StructType?名称和地址列的数据类型是什么?StringType还是StructType?