我想添加一个名为academics_category的新专栏,其中包含学位和非学位的价值观。 我创建了一个udf函数,它检查一个成长标准(教育)是否与学位匹配
问题是,输出中的每个值都不是学位。
from pyspark.sql.types import *
def academics_category(academics):
if academics == "Bachelors":
return "academic degree"
elif academics == "Masters":
return "academic degree"
else:
return "no academic degree"
academics_udf = udf(academics_category,StringType())
dfAdult = dfAdult.withColumn('academics_category',academics_udf(dfAdult['bildungsstand']))
bildung = dfAdult.groupBy('bildungsstand','bildungslevel').count().sort('bildungslevel').show(20)
+-------------+-------------+-----+
|bildungsstand|bildungslevel|count|
+-------------+-------------+-----+
| Preschool| 1.0| 51|
| 1st-4th| 2.0| 168|
| 5th-6th| 3.0| 333|
| 7th-8th| 4.0| 646|
| 9th| 5.0| 514|
| 10th| 6.0| 933|
| 11th| 7.0| 1175|
| 12th| 8.0| 433|
| HS-grad| 9.0|10501|
| Some-college| 10.0| 7291|
| Assoc-voc| 11.0| 1382|
| Assoc-acdm| 12.0| 1067|
| Bachelors| 13.0| 5355|
| Masters| 14.0| 1723|
| Prof-school| 15.0| 576|
| Doctorate| 16.0| 413|
+-------------+-------------+-----+
UDF不是非常理想的解决方案,尤其是对于Python来说——主要是因为需要在JVM和Python之间发送数据。只有在必要时,才建议使用从性能角度来看更好的Pandas UDFs
但在您的情况下,您可以像这样使用内置的^{} function :
注意,您需要使用
|
作为or
运算符,使用&
作为and
运算符,使用~
作为not
运算符SparkByExamples有很多good description of this function
但是如果您确实有固定的值列表,那么使用^{} function 检查值是否在给定值列表中更容易:
另外,我建议大家学习Spark,2ed,它会给你很好的介绍Spark,它的功能,等等
我在我的案例中发现了问题。根数据集的字符串值中有空格。我用trim函数替换了空格,并创建了一个新的数据框
相关问题 更多 >
编程相关推荐