我的时间序列当前存储为 Neo4j 服务器实例版本2.3.6中的图形(使用时间树结构,类似于this)(仅限REST接口,没有螺栓)。我想要做的是使用 PySpark 以分布式方式对这些时间序列进行一些分析。
现在,我知道将Spark与Neo4j连接的现有项目,尤其是列出here的项目。这些问题是他们专注于创建一个使用图形的界面。在我的情况下,图形是不相关的,因为我的Neo4j Cypher查询旨在生成值数组。下游的一切都是关于处理这些数组作为时间序列;再次,而不是图。
我的问题是:是否有人使用PySpark成功并行查询仅支持REST的Neo4j实例,如果是,您是如何做到的? py2neo 库似乎是一个很好的候选者,直到我意识到连接对象无法跨分区共享(或者如果它可以,我不知道如何)。现在我正在考虑让我的Spark作业在Neo4j服务器上运行独立的REST查询,但我想看看社区如何解决这个问题。
Best,Aurélien
答案 0 :(得分:0)
我不确定我是否完全理解问题。但在我阅读时:
如果我的理解是正确的:
从文档中:
import pandas as pd
from pyspark.sql.functions import pandas_udf
@pandas_udf("col1 string, col2 long")
def func(s1: pd.Series, s2: pd.Series, s3: pd.DataFrame) -> pd.DataFrame:
s3['col2'] = s1 + s2.str.len()
return s3
# Create a Spark DataFrame that has three columns including a sturct column.
df = spark.createDataFrame(
[[1, "a string", ("a nested string",)]],
"long_col long, string_col string, struct_col struct<col1:string>")
df.printSchema()
# root
# |-- long_column: long (nullable = true)
# |-- string_column: string (nullable = true)
# |-- struct_column: struct (nullable = true)
# | |-- col1: string (nullable = true)
df.select(func("long_col", "string_col", "struct_col")).printSchema()
# |-- func(long_col, string_col, struct_col): struct (nullable = true)
# | |-- col1: string (nullable = true)
# | |-- col2: long (nullable = true)
请注意,那些pd.Series
和pd.DataFrame
并不是您必须创建的熊猫对象。相反,通过用@pandas_udf
装饰函数,可以提供Spark对象,并且它们在每个分区中都像熊猫对象一样对待。
除了说它已经适用于我需要尝试的任何奇怪的UDF(如果可以先验地知道该模式!),我不知道除此之外的技术细节。 / p>