gpt4 book ai didi

python - 有没有办法在不破坏函数链的情况下在 PySpark 中执行强制转换或 withColumn 数据帧操作?

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:37 24 4
gpt4 key购买 nike

我喜欢使用 DataFrames 的一点是能够将函数调用链接在一起。我遇到的问题是,我正在努力寻找允许您执行 castwithColumn 引用 DataFrame 列的操作的语法。例如:

counts = sqlContext.read.format("com.databricks.spark.csv") \
.options(header=True) \
.load(path) \
.filter("cast(filterColumn as int) in (8, 11, 12)") \
.withColumn('newColumn',df.oldColumn.cast("date")) \ #<-- df doesn't exist, silly!
.groupBy(df.newColumn) \
.count() \
.collect()

有趣的是,执行转换在 filter 调用中效果很好。不幸的是,withColumngroupBy 似乎都不支持那种字符串 api。我试过了

.withColumn('newColumn','cast(oldColumn as date)')

但只会因为没有传入 column 的实例而被大吼大叫:

assert isinstance(col, Column), "col should be Column"

这与我在尝试使用 groupBy 做同样的事情时遇到的问题完全相同

我是否只需要硬着头皮将它们分解?

df = sqlContext.read.format("com.databricks.spark.csv") \
.options(header=True) \
.load(path) \
.filter("cast(filterColumn as int) in (8, 11, 12)")

counts = df.withColumn('newColumn',df.oldColumn.cast("date"))
.groupBy(df.newColumn) \
.count() \
.collect()

最佳答案

你可以使用col函数:

from pyspark.sql.functions import col

...
.withColumn('newColumn', col('oldColumn').cast('date'))

表达式:

from pyspark.sql.functions import expr

...
.withColumn('newColumn', expr('cast(oldColumn as date)'))

关于python - 有没有办法在不破坏函数链的情况下在 PySpark 中执行强制转换或 withColumn 数据帧操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102454/

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