有没有办法使用 spark 中的数据框列来定义关系类型?
import pandas as pd
_list = []
_dict = {}
_dict['ENV'] = "DEV"
_dict['PRIVILEGE'] = "DML"
_dict['ROLE'] = "ROLE1"
_dict['DATABASE'] = "Database1"
_list.append(_dict)
_dict['ENV'] = "DEV"
_dict['PRIVILEGE'] = "DDL"
_dict['ROLE'] = "ROLE2"
_dict['DATABASE'] = "Database1"
_list.append(_dict)
df = pd.DataFrame(_list)
df = spark.createDataFrame(df)
df.write.format("org.neo4j.spark.DataSource") \
.mode("Overwrite") \
.option("relationship", df["PRIVILEGE"]) \
.option("relationship.save.strategy", "keys") \
.option("relationship.target.labels", "DATABASE") \
.option("relationship.target.node.keys", "DATABASE, ENV") \
.option("relationship.target.save.mode", "overwrite") \
.option("relationship.source.labels", "ROLE") \
.option("relationship.source.save.mode", "overwrite") \
.option("relationship.source.node.keys", "ROLE, ENV") \
.save()
当我想要值时,它正在将类型写为 Column<'PRIVILEGE'>。
df["PRIVILEGE"]
返回 org.apache.spark.sql.Column
,因此您用作关系类型的只是 Column.toString()
的值(即 Column<'PRIVILEGE'>
)。
“关系”
option
期望它的参数(关系类型)是一个固定的字符串。它不支持从 DataFrame
列动态获取关系类型名称。
因此,您应该为每种关系类型创建一个单独的
DataFrame
,并为每个write
.创建一个单独的
DataFrame
顺便说一下,由于您为每个
_dict
元素重用相同的 _list
实例,所有 _list
元素将是相同的。您需要为每个元素创建一个新的字典。