Что-то мне нравится в работе с DataFrames
- это возможность цепочки вызовов функций вместе. Проблема, с которой я сталкиваюсь, заключается в том, что я изо всех сил пытаюсь найти синтаксис, который позволяет вам выполнить операцию cast
или withColumn
, которая ссылается на столбец DataFrame
. Например:Есть ли способ выполнить операцию трансляции cast или withColumn в pyspark без нарушения цепочки функций?
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
вызова. К сожалению, не кажется, что либо withColumn
, либо groupBy
поддерживают такой тип строки 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()
Это заслуживает WAY больше upvotes. –