clojure中的RDD和向量
给定一个函数,用于筛选出大于给定数据集(RDD)子集确定的最大日期的日期,从而使用确定的最大日期检查给定向量是否包含大于确定的最大日期的日期值 我尝试了以下方法:clojure中的RDD和向量,clojure,apache-spark,rdd,flambo,Clojure,Apache Spark,Rdd,Flambo,给定一个函数,用于筛选出大于给定数据集(RDD)子集确定的最大日期的日期,从而使用确定的最大日期检查给定向量是否包含大于确定的最大日期的日期值 我尝试了以下方法: (defn future-rows "input = { :col val :qty-col val} :col = Date column reference" [ row input ] (let [{:keys [ col qty-col ]} input get-qty-max-date (-&
(defn future-rows
"input = { :col val :qty-col val}
:col = Date column reference"
[ row input ]
(let [{:keys [ col qty-col ]} input
get-qty-max-date (-> (:rdd @scope-rdd)
(f/map #(if-not (or (s/blank? (get % qty-col)) (not (pos? (read-string (get % qty-col)))))
(get % col) false))
(f/reduce #(if (pos? (compare % %2)) %1 %2)))]
(when-not (pos? (compare (get row col) get-qty-max-date)) row)))
这里的行
是一个向量
。我面临的挑战是get quaty max date
的类型是RDD
。如果没有表单,如何在表单中进行比较
注意:未来行
函数将用作谓词
给定RDD:
[[" " "2009/12/02"] ["4" "2005/02/08"] ["0" "2014/12/02"] ["5" "2005/08/01"] ["2" "2007/09/02"]]
当未来行
用作谓词时,所需输出为:
[["4" "2005/02/08"] ["5" "2005/08/01"] ["2" "2007/09/02"]]
其中输入为上述函数的input{:col 1:qty col 0}
确定的最长日期为2007/09/02
。因此,从数据集中删除更大的日期2009/12/02
和2014/12/02
如果有任何其他的方法来做这件事,我将不胜感激
比如说,我们有一个主要的函数来实现这一点
(defn remove-rows [xctx input]
(f/filter (:rdd xctx) #(future-rows row { :col 1 :qty-col 0 }))
将产生所需的输出
谢谢 我想你在找这样的东西:
(定义不为空且为正?
[数量列]
(f/fn)
[世界其他地区]
(让[x(获取行数量列)]
(非(或(s/blank?x)(负)(读取字符串x‘‘‘‘‘‘‘‘‘‘‘)
(定义获取最大日期)
[列数量列]
(->)(:rdd@scope-rdd)
(f/过滤器(非空且正?数量列))
(f/map(f/fn[行](获取行列)))
(.前1名)
(一)
(defn过去了吗?
[列数量列]
(让[最大日期(获取最大日期列数量列)]
(f/fn[行](负)(比较(获取行列)最大日期()()))
(让[{:键[col qty col]}输入
非空正?(非空正?数量列)
过去了吗?(过去了吗?列数量列)]
(>(f/filter rdd不为空且为正?)(f/filter已通过?(f/collect)))
@zero323您能帮我解决上述问题吗?如果需要,我可以提供更多信息。谢谢好吧,我不明白整个结构。如果这是一个行级函数,为什么要尝试访问整个rdd
?忽略这一点,这里到底需要过滤什么?我看到您删除了第一个字段和最大数据值为空的条目。是这样吗?最后,日期的类别是什么?只是一个字符串?@zero323-太棒了,我将解释这个问题,我将为主筛选函数remove rows
编写谓词函数,在本例中,future rows
函数就是谓词。在给定的RDD
中,获取RDD
中所有qty列的non-zero
值,并提取其相应的日期值
:因此地图将返回类似[[“2005/02/08”][“2005/08/01”][“2007/09/02”]]
reduce
将返回最大日期,即2007/09/02
。因此,对于remove row
过滤器中的每个行
,删除日期值col 1
大于2007/09/02
@zero323的行,我想创建一个作用域rdd,通过整个rdd获得最大日期,我还考虑使用clj time.core
parse
和formatter
函数确保日期值正确格式化为yyyy/MM/dd
。)为了进行适当的排序,将时间戳转换为历元是很方便的。顺便说一句,你想达到什么目的?函数中的线程宏应该是->>而不是->