Forum Discussion
PySpark Notebook to process complex JSON
- Anonymous2 years ago
Hi ToddChitt ,
I tried to do some repro around your case, it is working perfectly fine.
Can you please find the code below,Sample Json:
[ { "id": "00000001-0000-0000-0000-000000000000", "positionData": { "manager": { "id": "00000002-0000-0000-0000-000000000000", "employeeNumber": "1234" } } }, { "id": "00000001-0000-0000-0000-000000000000", "positionData": { "manager": null } } ]
Sample Code:from pyspark.sql.types import StructType, StructField, StringType, ArrayType from pyspark.sql.functions import col, coalesce, lit # Define the schema for the nested objects schema = StructType([ StructField("id", StringType(), True), StructField("positionData", StructType([ StructField("manager", StructType([ StructField("id", StringType(), True), StructField("employeeNumber", StringType(), True) ]), True) ]), True) ]) # Read JSON data with multiline option and schema df = spark.read.option("multiline", "true").json("Files/testing.json", schema=schema) df = df.withColumn("ManagerId", coalesce(col("positionData.manager.id"), lit(None))) display(df)
Please try this and let me know if you have further queries.
Hi ToddChitt ,
Thanks for using Fabric Community.
PySpark provides a function called coalesce that allows you to specify a sequence of columns. The first non-null value in the sequence is returned. You can use this function to handle null values in your when expression like this:
from pyspark.sql.functions import col, coalesce
df = df.withColumn("ManagerId", coalesce(col("positionData.manager.id"), lit(None)))
In this example, coalesce will first try to access the value of the column "positionData.manager.id". If it's null, it will return None instead.
Can you please check this - pyspark.sql.functions.coalesce — PySpark 3.1.1 documentation (apache.org)
Hope this is helpful. Please let me know incase of further queries.