擅长:python、mysql、java
<p>我认为这实际上是一个熊猫问题,因为<code>spark.sql.DataFrame</code>似乎至少表现得像熊猫数据帧。但我不知道斯帕克。在任何情况下,你的“火花条件”实际上是(我认为)布尔级数。我确信有一些方法可以正确地对pandas中的布尔级数求和,但您也可以<em>也</em>将其简化为:</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
from funtools import reduce
df = pd.DataFrame([0,1,2,2,1,4], columns=["num"])
filter1 = df["num"] > 3
filter2 = df["num"] == 2
filter3 = df["num"] == 1
filters = (filter1, filter2, filter3)
filter = reduce(lambda x, y: x | y, filters)
df.filter(filter) # note .where is an alias for .filter
</code></pre>
<p>其工作原理如下:<code>reduce()</code>获取过滤器中的前两项内容并在其上运行<code>lambda x, y: x | y</code>。然后它获取</em>的<em>的输出,并将其作为<code>x</code>传递到<code>lambda x, y: x | y</code>,将<code>filters</code>中的<em>第三个</em>条目作为<code>y</code>传递。它一直在走,直到没有什么东西可以带走</p>
<p>因此,净效应是沿着一个可数累积应用一个函数。在这种情况下,函数只返回其输入的<code>|</code>,因此它完全执行您手动执行的操作,但如下所示:</p>
<pre class="lang-py prettyprint-override"><code>(filter1 | filter2) | filter3
</code></pre>
<p>我怀疑有一种更简单的方法可以做到这一点,但reduce有时是值得的<a href="https://www.artima.com/weblogs/viewpost.jsp?thread=98196" rel="nofollow noreferrer">Guido doesn't like it though</a></p>