Apache spark 如何删除pyspark中产品价格为空的记录

Apache spark 如何删除pyspark中产品价格为空的记录,apache-spark,pyspark,Apache Spark,Pyspark,我想按产品价格对产品进行分类。下面是代码行- products = sc.textFile("/user/cloudera/sqoop_import/products") 从第二列获取产品类别ID productsMap = products.map(lambda rec: (rec.split(",")[1], rec)) 按类别id分组 productsGroupBy = productsMap.groupByKey() 要按产品价格按类型排序,请将产品价格从字符串转换为浮动: for

我想按产品价格对产品进行分类。下面是代码行-

products = sc.textFile("/user/cloudera/sqoop_import/products")
从第二列获取产品类别ID

productsMap = products.map(lambda rec: (rec.split(",")[1], rec))
按类别id分组

productsGroupBy = productsMap.groupByKey()
要按产品价格按类型排序,请将产品价格从字符串转换为浮动:

for i in productsGroupBy.map(lambda rec: sorted(rec[1], key=lambda k: float(k.split(",")[4]))).collect(): print(i)
我无法为具有空值的产品价格键入几个值。那么,有没有办法删除这个特定字段的空值记录呢。请在下面找到错误日志的快照-

17/05/28 00:48:25错误执行者:第1.0阶段任务2.0中出现异常 (TID 6)org.apache.spark.api.python.python异常:回溯(most 最近调用(最后一次):文件 “/usr/hdp/2.5.0.0-1245/spark/python/lib/pyspark.zip/pyspark/worker.py”, 第111行,在main process()文件中 “/usr/hdp/2.5.0.0-1245/spark/python/lib/pyspark.zip/pyspark/worker.py”, 第106行,进程内序列化程序.dump\u流(func(split\u索引, 迭代器(输出文件)文件 “/usr/hdp/2.5.0.0-1245/spark/python/lib/pyspark.zip/pyspark/serializers.py”, 第263行,在dump_stream vs=list(itertools.islice(迭代器,批处理))中 文件“”,第2行,在文件“”中,第2行,在值中错误:无法 将字符串转换为浮点:

for i in productsGroupBy.map(lambda rec: sorted(rec[1], key=lambda k: float(k.split(",")[4]))).collect(): print(i)

我们可以过滤包含空值的产品,如下所示

引用-


在进入for循环之前,您是否尝试过类似
productsGroupBy=productsMap.filter(lambda行:yourProductPriceColumn!=“Null”).groupByKey()之类的方法?(否则,此筛选器也可以与productsGroupBy一起使用)。由于您已经导入了字符串值,通过此筛选,您将获得一个RDD,其中没有productPrice为“Null”的行,因此您将能够从字符串转换为浮点值。非常感谢@titiro89!!我运行了下面的代码并得到了下面的结果:
用于productsMap.filter中的I(lambda行:line.split(“,”[4]==”).collect():print(I)
。。。685,31,TaylorMade SLDR Irons-(Steel)4-PW,AW,,899.99,此处,产品价格已转移至第五指数,而非第四指数。所以,应该跳过这些记录@Divyojyoti Sinha-你能接受吗?我将不胜感激。