Tôi thích sử dụng khung dữ liệu tia lửa gốc vì nó cho phép tôi tùy chỉnh nhiều hơn. Tôi có thể sử dụng stringtype thuộc tính để truyền trường json từ khung dữ liệu sang trường jsonb trong bảng. Đối với trường hợp này, khung dữ liệu của tôi có hai trường.
from pyspark import SparkConf
sc = SparkContext.getOrCreate(SparkConf())
spark = SparkSession(sc)
df = spark.read.format('csv') \
.option('delimiter','|') \
.option('header','True') \
.load('your_path')
##some transformation...
url = 'jdbc:postgresql://your_host:5432/your_databasename'
properties = {'user':'*****',
'password':'*****',
'driver': "org.postgresql.Driver",
'stringtype':"unspecified"}
df.write.jdbc(url=url, table='your_tablename', mode='append', properties=properties)
Trước khi thực thi tập lệnh trên, bạn nên tạo bảng trong postgresql, vì thuộc tính mode được đặt là append . Điều này như sau:
create table your_tablename
(
my_json_field jsonb,
another_field int
)