【发布时间】:2019-07-05 16:53:41
【问题描述】:
我将此作为评论发布在this semi-related question,但我觉得它需要一个自己的帖子。
有谁知道在哪里可以找到要传递给cast() 的dataType 参数的有效字符串列表?我已经查看并找到了诸如 this 或 this 之类的东西,但它们都没有明确回答这个问题。
此外,我通过反复试验发现,您可以传递 bigint 或 tinyint 之类的内容,这些内容似乎可以工作,尽管它们没有被列为有效的 Spark 数据类型,至少不是我可以找到。有什么想法吗?
对于一些可重复性:
df = spark.createDataFrame(
[
[18786, "attr1", 0.9743],
[65747, "attr1", 0.4568],
[56465, "attr1", 0.6289],
[18786, "attr2", 0.2976],
[65747, "attr2", 0.4869],
[56465, "attr2", 0.8464],
],
["id", "attr", "val"],
)
print(df)
这给了你DataFrame[id: bigint, attr: string, val: double],我猜是默认推断架构。
然后你可以做这样的事情来重新转换类型:
from pyspark.sql.functions import col
fielddef = {'id': 'smallint', 'attr': 'string', 'val': 'long'}
df = df.select([col(c).cast(fielddef[c]) for c in df.columns])
print(df)
现在我得到DataFrame[id: smallint, attr: string, val: bigint],所以显然'long' 转换为'bigint'。我敢肯定还有其他类似的转换。
另外,我有一种奇怪的感觉,它会默默地忽略你传递的无效字符串,但 不是 真的。当我尝试在 fielddef 字典中传递 'attr': 'varchar' 时,我收到了 DataType varchar is not supported... 错误。
非常感谢任何帮助!
【问题讨论】:
标签: apache-spark pyspark