为了账号安全,请及时绑定邮箱和手机立即绑定

使用Pyspark计算Spark数据帧每列中非NaN条目的数量

使用Pyspark计算Spark数据帧每列中非NaN条目的数量

翻翻过去那场雪 2019-11-13 09:38:26
我在Hive中加载了一个非常大的数据集。它由大约190万行和1450列组成。我需要确定每一列的“覆盖率”,即每一列具有非NaN值的行的分数。这是我的代码:from pyspark import SparkContextfrom pyspark.sql import HiveContextimport string as stringsc = SparkContext(appName="compute_coverages") ## Create the contextsqlContext = HiveContext(sc)df = sqlContext.sql("select * from data_table")nrows_tot = df.count()covgs=sc.parallelize(df.columns)        .map(lambda x: str(x))        .map(lambda x: (x, float(df.select(x).dropna().count()) / float(nrows_tot) * 100.))在pyspark shell中进行尝试,如果我随后执行covgs.take(10),它将返回一个相当大的错误堆栈。它说在文件中保存有问题/usr/lib64/python2.6/pickle.py。这是错误的最后一部分:py4j.protocol.Py4JError: An error occurred while calling o37.__getnewargs__. Trace:py4j.Py4JException: Method __getnewargs__([]) does not exist        at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:333)        at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:342)        at py4j.Gateway.invoke(Gateway.java:252)        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)        at py4j.commands.CallCommand.execute(CallCommand.java:79)        at py4j.GatewayConnection.run(GatewayConnection.java:207)        at java.lang.Thread.run(Thread.java:745)如果有比我正在尝试的方法更好的方法来实现此目的,我欢迎您提出建议。但是,我不能使用熊猫,因为它在我正在使用的群集上当前不可用,并且我没有安装它的权利。
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信