Preferisco utilizzare il dataframe spark nativo, perché mi consente una maggiore personalizzazione. Posso usare stringtype per eseguire il cast del campo json da dataframe al campo jsonb nella tabella. In questo caso, il mio dataframe ha due campi.
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)
Prima di eseguire lo script sopra, dovresti creare la tabella in postgresql, perché la proprietà mode è impostato come aggiungi . Questo come segue:
create table your_tablename
(
my_json_field jsonb,
another_field int
)