我正在使用Neo4j CE 3.1.1,我和作者之间有书面关系.我想找到作者数量最多的N(例如N = 10)书籍.根据我发现的一些例子,我提出了查询:
MATCH (a)-[r:WRITES]->(b)
RETURN r,
COUNT(r) ORDER BY COUNT(r) DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud)
当我在Neo4j浏览器中执行此查询时,我得到了10本书,但这些书看起来不像大多数作者写的那些,因为它们只向作者展示了一些WRITES关系.如果我将查询更改为
MATCH (a)-[r:WRITES]->(b)
RETURN b,
COUNT(r) ORDER BY COUNT(r) DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud)
然后我得到了最多作者的10本书,但我没有看到他们与作者的关系.为此,我必须编写其他查询,明确说明我在上一个查询中找到的书的名称:
MATCH ()-[r:WRITES]->(b)
WHERE b.title="Title of a book with many authors"
RETURN r
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?为什么第一个查询不按预期工作?
我有一个包含书籍、章节和角色的图表。书有章节,章节提到人物。我想写一个查询,显示出现在大多数书籍中的 10 个字符,以及它们出现的书籍。
假设我的问题稍微简单一点,我可以轻松编写一个查询,显示大多数章节中出现的 10 个字符:
MATCH (chapter)-[:MENTIONS]->(character)
RETURN character,
COLLECT(chapter) as chapters
ORDER BY SIZE(chapters) DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
上面的这个查询工作正常。现在我正在尝试编写一个类似的查询来显示书籍而不是章节:
MATCH (book)-[:CONTAINS]->(chapter)-[:MENTIONS]->(character)
RETURN character,
COLLECT(book) as books
ORDER BY SIZE(books) DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
这个查询看起来很好,但是它只是报告了一堆没有任何关系的人物和书籍,因为书籍和人物之间没有直接关系。neo4j 能否推断出这些间接关系并将它们显示在查询中,而无需我修改数据并为每个模式手动插入
(book)-[:CONTAINS]->(chapter)-[:MENTIONS]->(character)
Run Code Online (Sandbox Code Playgroud)
新的关系
(book)-[:TALKS_ABOUT]->(character)
Run Code Online (Sandbox Code Playgroud)
?
我试图通过使用UDF替换spark数据帧中的某些值,但继续得到相同的错误.
调试时我发现它并不依赖于我正在使用的数据帧,也不依赖于我编写的函数.这是一个MWE,它具有一个简单的lambda函数,我无法正常执行.这应该基本上通过将值与自身连接来修改第一列中的所有值.
l = [('Alice', 1)]
df = sqlContext.createDataFrame(l)
df.show()
#+-----+---+
#| _1| _2|
#+-----+---+
#|Alice| 1|
#+-----+---+
df = df.withColumn("_1", udf(lambda x : lit(x+x), StringType())(df["_1"]))
df.show()
#Alice should now become AliceAlice
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误,提到了一个相当神秘的"AttributeError:'NoneType'对象没有属性'_jvm'.
File "/cdh/opt/cloudera/parcels/CDH-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/worker.py", line 111, in main
process()
File "/cdh/opt/cloudera/parcels/CDH-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/worker.py", line 106, in process
serializer.dump_stream(func(split_index, iterator), outfile)
File "/cdh/opt/cloudera/parcels/CDH-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/serializers.py", line 263, in dump_stream
vs = list(itertools.islice(iterator, batch))
File "/cdh/opt/cloudera/parcels/CDH-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/sql/functions.py", line 1566, in <lambda>
func = lambda _, it: map(lambda x: returnType.toInternal(f(*x)), it)
File "<stdin>", line 1, in <lambda> …Run Code Online (Sandbox Code Playgroud)