如何在pyspark中删除具有产品价格的Null值的记录

时间:2017-05-28 07:10:22

标签: apache-spark pyspark

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

productsMap = products.map(lambda rec: (rec.split(",")[1], rec))

从第2列获取产品类别ID

productsGroupBy = productsMap.groupByKey()

按类别ID分组

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

按产品价格按类型进行排序产品价格从字符串到浮动:

{{1}}

我无法对具有Null值的产品价格进行类推。那么,有没有办法删除具有此特定字段的Null值的记录。请在下面找到错误日志的快照 -

  

17/05/28 00:48:25错误执行者:阶段1.0中任务2.0中的异常   (TID 6)org.apache.spark.api.python.PythonException:Traceback(大多数)   最近的呼叫最后):文件   " /usr/hdp/2.5.0.0-1245/spark/python/lib/pyspark.zip/pyspark/worker.py" ;,   第111行,在主进程()文件中   " /usr/hdp/2.5.0.0-1245/spark/python/lib/pyspark.zip/pyspark/worker.py" ;,   第106行,正在处理serializer.dump_stream(func(split_index,   iterator),outfile)文件   " /usr/hdp/2.5.0.0-1245/spark/python/lib/pyspark.zip/pyspark/serializers.py" ;,   第263行,在dump_stream vs = list(itertools.islice(iterator,batch))   File"",第2行,在File"",第2行,在ValueError中:不能   将字符串转换为float:

1 个答案:

答案 0 :(得分:2)

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

  

报价 - isNotNull()

//filter the products containing null
filteredProducts = products.filter(products.price.isNotNull())
//create a tuple (CategoryId,record)
filteredProductsMap = filteredProducts.map(lambda rec: (rec.split(",")[1], rec))
//group by categoryId
productsGroupBy = filteredProductsMap.groupByKey()
//Sort based on product price
for i in productsGroupBy.map(lambda rec: sorted(rec[1], key=lambda k: float(k.split(",")[4]))).collect(): print(i)