如何从 中的所有路径返回不同的关系类型cypher?
查询示例:
MATCH p=(a:Philosopher)-[*]->(b:SchoolType)
RETURN DISTINCT EXTRACT( r in RELATIONSHIPS(p)| type(r) ) as RelationshipTypes
Run Code Online (Sandbox Code Playgroud)
这将返回每个路径 p 的集合。
我想返回一个包含所有集合中不同关系类型的集合。
这是运行查询的图表要点的链接-
如何一步创建带有时间戳数据类型的火花数据框?这是我分两步完成的方法。使用火花 2.4
首先使用时间戳字符串创建数据框
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions.to_timestamp
val eventData = Seq(
Row(1, "2014/01/01 23:00:01"),
Row(1, "2014/11/30 12:40:32"),
Row(2, "2016/12/29 09:54:00"),
Row(2, "2016/05/09 10:12:43")
)
val schema = StructType(List(
StructField("typeId", IntegerType, false),
StructField("eventTimeString", StringType, false)
))
val eventDF = spark.createDataFrame(
sc.parallelize(eventData),
schema
)
eventDF.show()
+------+-------------------+
|typeId| eventTimeString|
+------+-------------------+
| 1|2014/01/01 23:00:01|
| 1|2014/11/30 12:40:32|
| 2|2016/12/29 09:54:00|
| 2|2016/05/09 10:12:43|
+------+-------------------+
Run Code Online (Sandbox Code Playgroud)
然后将字符串转换为时间戳并删除字符串列
val eventTimestampsDF = eventDF
.withColumn("eventTime", to_timestamp($"eventTimeString", "yyyy/MM/dd k:mm:ss"))
.drop($"eventTimeString")
Run Code Online (Sandbox Code Playgroud)
如何消除第二步并直接创建时间戳?
我喜欢使用 Spark 数据帧映射聚合语法,如下所示:
jaccardDf
.groupBy($"userId")
.agg(
"jaccardDistance"->"avg"
, "jaccardDistance"->"stddev_samp"
, "jaccardDistance"->"skewness"
, "jaccardDistance"->"kurtosis"
)
Run Code Online (Sandbox Code Playgroud)
有没有办法在仍然使用 Map 语法的同时对结果列进行别名?当我需要别名时,我会这样做
jaccardDf
.groupBy($"userId")
.agg(
avg("jaccardDistance").alias("jaccardAvg")
,stddev_samp("jaccardDistance").alias("jaccardStddev")
,skewness("jaccardDistance").alias("jaccardSkewness")
,kurtosis("jaccardDistance").alias("jaccardKurtosis")
)
Run Code Online (Sandbox Code Playgroud)