python - PySpark 错误:StructType 不能接受类型中的对象 0
问题描述
我的数据文件与 Graph Edges 相关。每行的格式为(src node & dest node)。这是我的架构定义。
eschema = StructType([StructField("src", StringType(), True), StructField("dst", StringType(), True)])
我试图阅读该行,用分隔符(',')将其拆分并将每个元素转换为一个 int。但这以某种方式失败了。
lines = sc.textFile(filename)
lines = lines.map(lambda l : map(int, l.split(delim)))
lines = lines.map(lambda l : Row(l[0], l[1]))
运行此程序时,我收到错误
StructType can not accept object 0 in type <type 'int'>
我正在使用 Python 2.7,Spark > 2.0。分割线后,对象的类型是 Unicode 而不是字符串,这会有什么不同。如何解决这个问题。任何建议都会有很大帮助。谢谢
解决方案
如果分隔符是“,”,那么它只是一个普通的 csv 文件。由于您使用的是 Spark > 2.0,因此您可以使用现代数据框 api;您可以使用 spark 会话,而不是使用 spark 上下文(按照约定 sc):
df = spark.read.format("csv")\
.option("header", "true")\ # if you have a header inside the file, otherwise don't put this line
.option("schema", eschema)\
.load(filename)
除了通过提供模式之外,.option("schema", )
您还可以使用.option("inferSchema", "true")
which 将尝试通过查看数据来猜测文件结构。
推荐阅读
- r - 自动绘图对象的轴刻度
- node.js - React Native 获取 https 节点 js 服务器
- python - 在 django 视图中提交表单时如何获取下拉选择的值而不是文本?
- python - 用于 redis 协议的 Apache Ignite 配置以保存字节数据
- arrays - 给定数组的子集数量,使得它们的乘积形式为 p1*p2*p3
- javascript - ChartJS 忽略 TailwindCSS 样式
- c++ - VSCode C++ 初始化器列表格式
- python - 迭代numpy数组的最后一个轴
- powerquery - 根据 Power Query 中另一个表中的数据创建汇总表
- javascript - Angular:根据是否从 Firebase DB 接收到值有条件地呈现