Spark中createDataFrame元组末尾逗号影响创建结果的原因解析
为什么元组末尾的逗号会影响Spark的createDataFrame方法?
问题核心在于Python元组的定义规则,以及Spark对输入数据格式的要求:
Python单元素元组必须带逗号
你最初写的('11s1 ab')并不是元组,只是被括号包裹的普通字符串——Python会忽略单个值外层的括号,直接将其解析为字符串类型。而('11s1 ab',)才是真正的单元素元组,末尾的逗号是Python识别单元素元组的关键标识。你可以用type()验证:print(type(('11s1 ab'))) # 输出 <class 'str'> print(type(('11s1 ab',))) # 输出 <class 'tuple'>Spark对createDataFrame输入数据的要求
Spark的createDataFrame方法要求data参数中的每个元素是代表一行数据的可迭代对象(比如元组、列表),对象中的每个元素对应schema里的一个字段:- 错误代码里,
data=[('11s1 ab')]等价于data=['11s1 ab'],列表中的元素是字符串。Spark会尝试把字符串当成一行数据解析,但字符串本身是字符序列,会被拆成单个字符,这和你指定的单字段schema完全不匹配,因此抛出TypeError: Can not infer schema for type: <class 'str'>。 - 修改后的代码
data=[('11s1 ab',)]中,列表元素是单元素元组,Spark会把元组里的唯一值对应到schema的str字段,匹配成功,因此能正常创建DataFrame。
- 错误代码里,
内容的提问来源于stack exchange,提问作者Hassaan Anwar
相关产品推荐
相关产品推荐

