gpt4 book ai didi

python - 为什么 createDataFrame 的推断程序不将此数据创建为字符串的列?

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:13 27 4
gpt4 key购买 nike

以下代码显示了如何构建数据帧。可以看出数据框包含两列。每列在最后一行都有整数和一个字符串。

据我所知,createDataFrame必须分析列的数据类型(并因此分析行)。然后,假设一种数据类型可以包含所有行。在这种情况下,我假设列必须是字符串数据类型,因为这种类型可以包含数字和字符串。

因此,为什么生成的 dataFrame 具有 long 数据类型的列并且字符串无效?

# DataFrame construction:
b = sqlContext.createDataFrame([(1, 2),(2, 3), (3, 3), ('test0', 'test1')], ['pepe', 'pepa'], samplingRatio=1)
b.show()


#+----+----+
#|pepe|pepa|
#+----+----+
#| 1| 2|
#| 2| 3|
#| 3| 3|
#|null|null|
#+----+----+

根据@cceneson 的建议,我决定重新运行代码,删除参数 samplingRatio,我得到了完全相同的结果。知道为什么会这样吗?

最佳答案

发生这种情况是因为当 DataFrame 从本地数据结构创建时,samplingRatio 参数被完全忽略。 It is used only if data is a RDD .否则数据将转换为 Java RDD,类型不匹配的对象将转换为空值。

如果您传递 RDD 而不是列表,Spark 将应用模式推断并抛出异常,这与 Scala 中的示例相同。发生这种情况是因为 Spark 不支持混合类型并且不执行自动转换。

为什么 inferSchema 参数存在?它看起来像是对从 Python 字典构建的 RDD 进行弃用推理的产物。但这只是一个大胆的猜测。

关于python - 为什么 createDataFrame 的推断程序不将此数据创建为字符串的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35412260/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com