我在Hive中加載了一個(gè)非常大的數(shù)據(jù)集。它由大約190萬行和1450列組成。我需要確定每一列的“覆蓋率”,即每一列具有非NaN值的行的分?jǐn)?shù)。這是我的代碼: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中進(jìn)行嘗試,如果我隨后執(zhí)行covgs.take(10),它將返回一個(gè)相當(dāng)大的錯(cuò)誤堆棧。它說在文件中保存有問題/usr/lib64/python2.6/pickle.py。這是錯(cuò)誤的最后一部分: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)如果有比我正在嘗試的方法更好的方法來實(shí)現(xiàn)此目的,我歡迎您提出建議。但是,我不能使用熊貓,因?yàn)樗谖艺谑褂玫娜杭袭?dāng)前不可用,并且我沒有安裝它的權(quán)利。
使用Pyspark計(jì)算Spark數(shù)據(jù)幀每列中非NaN條目的數(shù)量
翻翻過去那場(chǎng)雪
2019-11-13 09:38:26