【发布时间】:2019-08-14 17:58:11
【问题描述】:
我有一个巨大的 rdf 三元组(主谓宾)文件,如下图所示。它提取粗体项目并具有以下输出的目标
Item_Id | quantityAmount | quantityUnit | rank
-----------------------------------------------
Q31 24954 Meter BestRank
Q25 582 Kilometer NormalRank
我想提取符合以下模式的行
给主题一个指针 (
<Q31> <prop/P1082> <Pointer_Q31-87RF> .)指针有排名(
<Pointer_Q31-87RF> <rank> <BestRank>)
和 valuePointer (<Pointer_Q31-87RF> <prop/Pointer_value/P1082> <value/cebcf9>)valuePointer 依次指向其 Amount (
<value/cebcf9> <quantityAmount> "24954") 和 Unit (<value/cebcf9> <quantityUnit> <Meter>)
正常的方法是逐行读取文件并提取上述每个模式(使用 sc.textFile('inFile').flatMap(lambda x: extractFunc(x)) ,然后通过不同的连接将它们组合起来这样它将提供上表。 有没有更好的方法来解决这个问题?我包括下面的文件示例。
<Q31> <prop/P1082> <Pointer_Q31-87RF> .
<Pointer_Q31-87RF> <rank> <BestRank> .
<Pointer_Q31-87RF> <prop/Pointer_P1082> "+24954"^^<2001/XMLSchema#decimal> .
<Pointer_Q31-87RF> <prop/Pointer_value/P1082> <value/cebcf9> .
<value/cebcf9> <syntax-ns#type> <QuantityValue> .
<value/cebcf9> <quantityAmount> 24954
<value/cebcf9> <quantityUnit> <Meter> .
<Q25> <prop/P1082> <Pointer_Q25-8E6C> .
<Pointer_Q25-8E6C> <rank> <NormalRank> .
<Pointer_Q25-8E6C> <prop/Pointer_P1082> "+24954”
<Pointer_Q25-8E6C> <prop/Pointer_value/P1082> <value/cebcf9> .
<value/cebcf9> <syntax-ns#type> <QuantityValue> .
<value/cebcf9> <quantityAmount> "582" .
<value/cebcf9> <quantityUnit> <Kilometer> .
【问题讨论】:
-
检查stackoverflow.com/questions/31227363/…。例如,在您的示例数据中,您可以通过设置 delimiter = '\n\n' 以段落模式读取数据,以便在同一个 RDD 元素中读取所有相关行。
-
我的错,有\n\n,我这样做是为了提高可读性。
-
你能用
\n<Q作为分隔符吗? -
订单不保证
标签: apache-spark pyspark pyspark-sql