我有一个列id,它的类型是int,但后来改为bigint。它有两种类型的值。
from pyspark.sql.functions import *
from pyspark.sql.types import *
df = spark.read.parquet('hdfs path')
df = df.select("id", "code")
df=df.withColumn("id1", df["id"].cast(LongType()))
res1=df.select("id1", "code")
res1.show(1, False)
字符串
它向我显示了 Dataframe ,但当我尝试对它们执行一些操作时,例如:
res1.groupBy('code').agg(countDistinct("id1")).show(1, False)
型
我得到Column: [id], Expected: int, Found: INT64
我试过mergeSchema也没有工作。
2条答案
按热度按时间x6yk4ghg1#
字符串
这应该是可行的。在spark中, Dataframe 是不可变的,所以你不应该把转换操作的值赋给同一个df变量,你应该使用不同的变量名。在scala中,这会给你给予编译时错误,但在python中是允许的,所以你不会注意到它。
如果你愿意,你也可以链接你所有转换,得到一个单独的df变量,并对它执行groupby操作,如下所示:
型
c0vxltue2#
此错误可能是由于正在读取的数据的架构造成的。请尝试在读取链中使用
read.option('mergeSchema', 'true')
以强制架构变得兼容。