JHi*_*son 3 python apache-spark apache-spark-sql pyspark
我喜欢使用的东西DataFrames是将函数调用链接在一起的能力.我遇到的问题是我很难找到允许你执行引用列的一个cast或一个withColumn操作的语法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()
Run Code Online (Sandbox Code Playgroud)
值得注意的是,在演唱会中演出非常有效filter.不幸的是,它似乎没有withColumn或groupBy支持那种字符串api.我试过这样做
.withColumn('newColumn','cast(oldColumn as date)')
Run Code Online (Sandbox Code Playgroud)
但只是因为没有通过以下实例而被大吼column:
assert isinstance(col, Column), "col should be Column"
Run Code Online (Sandbox Code Playgroud)
这是我试图做同样的事情时遇到的完全相同的问题 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()
Run Code Online (Sandbox Code Playgroud)
你可以使用col功能:
from pyspark.sql.functions import col
...
.withColumn('newColumn', col('oldColumn').cast('date'))
Run Code Online (Sandbox Code Playgroud)
或者expr:
from pyspark.sql.functions import expr
...
.withColumn('newColumn', expr('cast(oldColumn as date)'))
Run Code Online (Sandbox Code Playgroud)