如何将Delta表最新版本号转换为Integer类型?
解决Delta表版本号转Integer的问题
你当前的代码得到的是一个单行列的DataFrame,要拿到Integer类型的版本号,得从DataFrame里提取出具体值再转换,之前的方法没到位,给你几个可行的思路:
直接提取Row中的值并转换
df.collect()[0]返回的是Spark的Row对象,不是数值,需要取出对应的字段再转成Integer:latest_version = int(df.collect()[0]["version"])或者用字段名直接访问:
latest_version = int(df.collect()[0].version)用更高效的
first()方法提取
因为你的DataFrame只有一行数据,用first()比collect()更高效,不用加载全部行:latest_version = int(df.first()["version"])先转换DataFrame列类型再提取
如果担心原version列不是数值类型,可以先把列转成Integer类型,再提取值:from pyspark.sql.types import IntegerType df_version = df.withColumn("version", col("version").cast(IntegerType())) latest_version = df_version.first()["version"]这里转完之后,提取出来的本身就是Integer类型,不用再用
int()转换(如果原数据是合法数值的话)。
另外,你之前的result2 = df.withColumn("version",df.version.cast('integer'))只是修改了DataFrame的列类型,并没有把值取出来,所以结果还是一个DataFrame,不是单个Integer值。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

