0

I have a parquet file as source and I loaded that parquet file using PySpark notebook as shown below:

df_Employee = spark.read.parquet(<filename>)
df_Employee .createOrReplaceTempView("employee_data")

here's how the table looks like


Employee Table:

-Name
-Salary
-Company
-Address (datatype=string)
 --street.name
 --street.number
 --postalcode
-JoiningDate

I have the following code but I'm stuck on how to extract street.name & street.number from the above SQL table, here's what I have

df=spark.sql(f'''
select Name, Salary, Company, json_extract(Address,'$."street.name"') as StreetName
from employee_data
''')

but json_extract(Address,'$."street.name"') as StreetName throws an error. How to extract this nested json field?

6
  • select Name, Salary, Company, Address.street.name as StreetName , Address.street.number as StreetNumber ? Commented Jan 19, 2023 at 20:22
  • what if the Address is a string column? Commented Jan 19, 2023 at 20:37
  • we dont know your data. please create a minimal reproducible example Commented Jan 19, 2023 at 20:38
  • Address is a string column Commented Jan 19, 2023 at 21:00
  • Can you provide your sample data? Commented Jan 20, 2023 at 0:01

1 Answer 1

1

I reproduce the same in my environment created sample data frame as per Employee Table :

dat1= [("vamsi", 20000, "MID", '{"street.name": "App socity", "street.number": "912", "postalcode": "523112"}', "2023-01-20"),
        ("rakesh",30000, "MID", '{"street.name": "Mind space", "street.number": "456", "postalcode": "600062"}', "2023-01-19")]
col = ["Name", "Salary", "Company", "Address", "JoiningDate"]

df1 = spark.createDataFrame(dat1, col)
df1.createOrReplaceTempView("sample_table")

enter image description here

You can achieve the same requirement using the following code.

df1 = spark.sql(f'''select Name, Salary, Company, json_tuple(Address, 'street.name', 'street.number') as (StreetName, StreetNumber)
from sample_table''')
df1.show()

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.