我试图弄清楚如何通过使用与哥伦布()函数并在pySpark中的cp_codeset列()函数中调用udf来动态地为列表中的每个项目创建列(在这种情况下为列表)。下面是我写的代码,但它给了我一个错误。
from pyspark.sql.functions import udf, col, lit
from pyspark.sql import Row
from pyspark.sql.types import IntegerType
codeset = set(cp_codeset['CODE'])
for col_name in cp_codeset.col_names.unique():
def flag(d):
if (d in codeset):
name = cp_codeset[cp_codeset['CODES']==d].col_names
if(name==col_name):
return 1
else:
return 0
cpf_udf = udf(flag, IntegerType())
p.withColumn(col_name, cpf_udf(p.codes)).show()
另一种选择是手动执行它,但在这种情况下,我必须编写相同的udf函数并使用养分()函数调用它75次(这是cp_codeset["col_names"]的大小)
下面是我的两个数据帧,我正在尝试获得结果如何显示
id|codes
1|100
2|102
3|104
codes| col_names
100|a
101|b
102|c
103|d
104|e
105|f
id|codes|a|c|e
1|100 |1|0|0
2|102 |0|1|0
3|104 |0|0|1
我将使用get_dummies
和join
map
m = cp_codeset.set_index('codes').col_names
P.join(pd.get_dummies(P.codes.map(m)))
id codes a c e
0 1 100 1 0 0
1 2 102 0 1 0
2 3 104 0 0 1
过滤此数据后:
cp_codeset.set_index('codes').loc[p.codes]
Out[44]:
col_names
codes
100 a
102 c
104 e
只需使用get_dummies
:
pd.get_dummies(cp_codeset.set_index('codes').loc[p.codes])
Out[45]:
col_names_a col_names_c col_names_e
codes
100 1 0 0
102 0 1 0
104 0 0 1
问题内容: 我有这样的数据我想创建一个PySpark数据框 我已经用过 但我总是得到 我如何获得如下所示的结果? 问题答案: 我发现将参数视为元组列表很有用,其中列表中的每个条目对应于DataFrame中的一行,而元组的每个元素对应于一列。 您可以通过将列表中的每个元素设为元组来获得所需的输出: 或者,如果更改源很麻烦,则可以等效地执行以下操作:
问题内容: 使用Spark 1.6,我有一个Spark (命名为),其值分别为A,B,C,DS,DNS,E,F,G和H,我想使用下面的值创建一个新列(例如),我该如何映射?(因此fi’A’需要映射为’S’等。) 问题答案: 使用UDF(与版本无关)的低效率解决方案: 结果: 创建文字的效率更高( Spark > = 2.0,Spark <3.0): 结果相同: 但更有效的执行计划: 与UDF版本相
问题内容: 背景 我想在sql select语句中动态重命名case语句。 例如: 我想要的输出是创建的列列表,其中标签作为与“ id”列不同的id。 但是,此变量 x.id 并不是动态输出值,而是我输出的是单列x.id。 例如: 表中的列… id — c1 ---- c2 1 ---- x1 — x2 2 ---- x2 ---- x3 3 ---- x4 ---- x5 在运行查询后,期望的列
如何将一个新的列事件添加到数据帧中,该事件将是< code>generate_header的结果?如何添加一行作为列值? 可能我们需要将函数转换为UDF 假设我们有这样的东西 我们想得到这个
我有一个包含3列的数据表,我想使用列投影的值创建一个新列。 应该如何从投影中选择值?--它应该选择前一年投影的3个具体值--如果您要为2020年创建一个新列,它应该从2021年、2022年和2023年选择值 我已经尝试了以下SQL: spark.sql(''从表中选择serial_number,pit_pd_proj为proj1,year,lead(pit_pd_proj,3)over(parti
我有一个数据框,如: 我需要为每个列应用一些函数,并在这个数据帧中创建具有特殊名称的新列。 所以我需要根据列和(如name)乘以两个额外的列,名称为和由两个。是否可以使用或其他结构来完成此操作?