有没有办法在 spark 中使用数据框列定义关系类型?

问题描述 投票:0回答:1

有没有办法使用 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'>。

apache-spark types neo4j databricks relationship
1个回答
0
投票

df["PRIVILEGE"]
返回
org.apache.spark.sql.Column
,因此您用作关系类型的只是
Column.toString()
的值(即
Column<'PRIVILEGE'>
)。

“关系”

option
期望它的参数(关系类型)是一个固定的字符串。它不支持从
DataFrame
列动态获取关系类型名称。

因此,您应该为每种关系类型创建一个单独的

DataFrame
,并为每个
write
.
创建一个单独的
DataFrame

顺便说一下,由于您为每个

_dict
元素重用相同的
_list
实例,所有
_list
元素将是相同的。您需要为每个元素创建一个新的字典。

© www.soinside.com 2019 - 2024. All rights reserved.