【问题标题】:Pyspark : TypeError: unsupported operand type(s) for +: 'int' and 'str'Pyspark:TypeError:+的不支持的操作数类型:'int'和'str'
【发布时间】:2021-11-16 20:40:19
【问题描述】:

我正在学习 Pyspark,只是一个初学者。我收到标题中提到的错误。 我已经关注了类似的问题并尝试了这里提到的内容,但仍然没有帮助。 https://stackoverflow.com/questions/20441035/unsupported-operand-types-for-int-and-str

请在下面找到我的一些代码sn-p

age=lines.map(lambda x: x.split(',')[2])
friends=lines.map(lambda x: x.split(',')[3])

rdd=lines.map(lambda x: int(x.split(',')[2]) +","+ int(x.split(',')[3]))


totalsByAge = rdd.mapValues(lambda x: (x, 1)).reduceByKey(lambda x, y: (x[0] + y[0], x[1] + y[1]))
averagesByAge = totalsByAge.mapValues(lambda x: x[0] / x[1])
results = averagesByAge.collect()
for result in results:
    print(result)

我在使用 map 时已将 rdd 转换为 int,但仍然收到错误

    rdd=lines.map(lambda x: int(x.split(',')[2]) +","+ int(x.split(',')[3]))
TypeError: unsupported operand type(s) for +: 'int' and 'str'

我也尝试删除“+”,但语法不正确。

【问题讨论】:

  • 该错误肯定是由于您尝试添加/连接的值类型不同(int + str + int)。根据我的理解,您正在尝试为第 3 列(年龄)中的每个值找到第 4 列(朋友)中的平均值,例如按年龄分组,然后聚合朋友列以找到平均值。这种理解正确吗?如果没有,您能否添加您要使用此代码实现的目标?一些示例输入和输出数据也会有所帮助。

标签: pyspark apache-spark-sql


【解决方案1】:

您正在添加整数和字符串,这在 python 中是无法完成的。 您首先必须连接字符串,然后将它们转换为 int。

rdd=lines.map(lambda x: int(x.split(',')[2] +","+ x.split(',')[3]))

【讨论】:

  • 你好@robert Kossendey,感谢您的调查。我试过你说的,现在我得到错误 rdd=lines.map(lambda x: int(x.split(',')[2] +","+ x.split(',')[3]) ) ValueError: int() 的无效文字,基数为 10:'33,385'。我搜索了错误,“这意味着您传递给 int 的参数看起来不像数字”我看到“,”是一个问题。 33 和 385 是正确的。那么我该如何处理呢?如果我为第 2 列和第 3 列创建 2 个 RDD 并分别转换为 int,如何在 map 函数中传递值?感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2022-07-27
  • 2016-04-15
  • 2012-11-29
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多