我在pyspark中使用sqlContext.sql函数读取了一个数据框。它包含4个数字列,每个客户都有信息(这是键ID)。我需要计算每个客户端的最大值并将此值加入数据框:
+--------+-------+-------+-------+-------+
|ClientId|m_ant21|m_ant22|m_ant23|m_ant24|
+--------+-------+-------+-------+-------+
| 0| null| null| null| null|
| 1| null| null| null| null|
| 2| null| null| null| null|
| 3| null| null| null| null|
| 4| null| null| null| null|
| 5| null| null| null| null|
| 6| 23| 13| 17| 8|
| 7| null| null| null| null|
| 8| null| null| null| null|
| 9| null| null| null| null|
| 10| 34| 2| 4| 0|
| 11| 0| 0| 0| 0|
| 12| 0| 0| 0| 0|
| 13| 0| 0| 30| 0|
| 14| null| null| null| null|
| 15| null| null| null| null|
| 16| 37| 29| 29| 29|
| 17| 0| 0| 16| 0|
| 18| 0| 0| 0| 0|
| 19| null| null| null| null|
+--------+-------+-------+-------+-------+
在这种情况下,客户端“ six”的最大值为23,而客户端“ ten”的最大值为30。“ null”在新列中自然为null。
请帮助我显示如何执行此操作。
我认为将值组合到列表中而不是找到最大值将是最简单的方法。
from pyspark.sql.types import *
schema = StructType([
StructField("ClientId", IntegerType(), True),
StructField("m_ant21", IntegerType(), True),
StructField("m_ant22", IntegerType(), True),
StructField("m_ant23", IntegerType(), True),
StructField("m_ant24", IntegerType(), True)
])
df = spark\
.createDataFrame(
data=[(0, None, None, None, None),
(1, 23, 13, 17, 99),
(2, 0, 0, 0, 1),
(3, 0, None, 1, 0)],
schema=schema)
import pyspark.sql.functions as F
def agg_to_list(m21,m22,m23,m24):
return [m21,m22,m23,m24]
u_agg_to_list = F.udf(agg_to_list, ArrayType(IntegerType()))
df2 = df.withColumn('all_values', u_agg_to_list('m_ant21', 'm_ant22', 'm_ant23', 'm_ant24'))\
.withColumn('max', F.sort_array("all_values", False)[0])\
.select('ClientId', 'max')
df2.show()
输出:
+--------+----+
|ClientId|max |
+--------+----+
|0 |null|
|1 |99 |
|2 |1 |
|3 |1 |
+--------+----+
我有一个pyspark数据框,在这里我可以找到每列的最小/最大值和最小/最大值计数。我可以使用: 我希望在同一数据帧中也有最小/最大值的计数。我需要的具体输出: …|col|n|col|m| …|xn | xm |。。。最小值(col(coln)) 计数(col_n==xn)|计数(col_m==xm)|。。。
问题内容: 我想为每一行计算最大列子集,并将其添加为现有列的新列。 我以非常尴尬的方式做到了这一点: 该功能的工作原理是: 返回: 我认为,如果可以使用带有的用户定义函数,则可以更简单地完成。但是我不知道该怎么做。如果您有更简单的方法来实现这一目标,请告诉我。我正在使用Spark 1.6 问题答案: 让我们从几个导入开始 接下来定义负无穷大字面量: 映射列并将结果传递给: 最后: 结果: 您可以将
我有一个pyspark数据框架,在这个数据框架上,我对多类数据应用了随机分类器模型(来自py spark . ml . classification import RandomForestClassifier)。 现在,我有预测和概率列(密集向量列)。我想要一个新列中的单个最高概率,它来自与预测相对应的可用概率列。你能告诉我一条路吗?
问题内容: 如果我有一个数组,我想检查数组中有多少个。在JavaScript中不使用循环循环的最优雅的方法是什么? 问题答案: 很简单:
假设我有下面的。我想组合价格列和值列,以便所有价格都在一列中,所有卷都在另一列中。我还想要标识价格级别的第三列。例如,、和。 这就是最终的df应该是什么样子: 我尝试使用,我认为几乎有正确的答案。 这就是熔融时部分df的样子: 上面的问题是,数量和价格在同一列中,但我希望它们在两个单独的列中。 我使用了正确的函数吗?
问题内容: 我有一个像这样的数据框(df): 如果具有肯定/相同和行,则这些行位于同一块中。在这种情况下,带有的行。我想将行拆分为块,并计算该块中的行数。如果行的长度不是6,则删除整个块,否则,保留该块。 我的粗略代码: 预期输出: 谢谢! 问题答案: 我认为,在和没有S,所以使用+ : 详情: 不幸的是真的很慢,因此如果需要更好的性能,请使用: 警告 给定组数,结果不能解决性能问题,这对于其中一