我想按产品价格对产品进行分类。以下是代码行 -
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:
答案 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)