【发布时间】:2019-12-23 16:22:53
【问题描述】:
我不是 RDD 方面的专家,并且正在寻找一些答案,我试图在 pyspark RDD 上执行一些操作但无法实现,特别是使用子字符串。我知道我可以通过将 RDD 转换为 DF 来做到这一点,但是想知道这是如何在前 DF 时代之前完成的?公司仍然更喜欢在 RDD 或数据帧中工作吗?
我的代码:
rdd= sc.textFile("Sales.txt")
##Taking only required columns and changing the data types
rdd_map = rdd.map(lambda line: (int((line.split("|")[0])),int((line.split("|")[1])),line.split("|")[4]))
##Filtering the data
rdd_filter = rdd_map.filter(lambda x: (x[0] > 43668) & ('-' in x[2]))
## Trying to perform substring
rdd_clean = rdd_filter.map(lambda x: x.substr(x[2],1,3))
数据样本:
43665|63|OLD ORDER|Sport-100 Helmet, Re|HL-U509-R
43668|87|OLD ORDER|Sport-100 Helmet, Re|HL-U509-R
完整的错误信息:
org.apache.spark.SparkException:作业因阶段失败而中止:阶段 50.0 中的任务 0 失败 1 次,最近失败:阶段 50.0 中丢失任务 0.0(TID 152,本地主机,执行程序驱动程序):org.apache .spark.api.python.PythonException: Traceback(最近一次调用最后一次):
【问题讨论】:
-
请发布整个错误消息和
Sales.txt的一些示例。 -
更新了原始帖子中所需的详细信息,也想知道 op.1st 记录中发布的其他详细信息:43665|63|旧订单|Sport-100 头盔,Re|HL-U509-R 43668|87|旧订单|Sport-100 头盔,Re|HL-U509-R
-
您的预期结果是什么?
-
我想从结果中获取前 3 个字符 HL- ,但是我尝试使用以下代码经过一些研究后能够成功获得它 rdd_clean= rdd_filter.map(lambda x: x[ 2][1:3]) ,但我也想与 RDD 中的其他列一起获得结果
标签: apache-spark pyspark rdd