PySpark DataFrame Floor Division 不支持的操作数类型

标签 pyspark pyspark-dataframes

我有一个如下所示的数据集:
enter image description here
我按年龄分组,平均每个年龄的 friend 数量

from pyspark.sql import SparkSession
from pyspark.sql import Row
import pyspark.sql.functions as F

def parseInput(line):
    fields = line.split(',')
    return Row(age = int(fields[2]), numFriends = int(fields[3]))

spark = SparkSession.builder.appName("FriendsByAge").getOrCreate()
lines = spark.sparkContext.textFile("data/fakefriends.csv")
friends = lines.map(parseInput)
friendDataset = spark.createDataFrame(friends)
counts = friendDataset.groupBy("age").count()
total = friendDataset.groupBy("age").sum('numFriends')
res = total.join(counts, "age").withColumn("Friend By Age", (F.col("sum(numFriends)") // F.col("count"))).drop('sum(numFriends)','count')
我得到以下错误:
TypeError: unsupported operand type(s) for //: 'Column' and 'Column'
通常,我使用 //在 Python 3.0+ 中并返回一个整数值,正如我在这里预期的那样,但是,在 PySpark 数据报中,//不起作用,只有/起作用。有什么理由不工作吗?我们必须使用round函数来获取整数值吗?

最佳答案

不确定原因。但您可以将类型转换为 int 或使用 Floor 函数

from pyspark.sql import functions as F
tst= sqlContext.createDataFrame([(1,7,9),(1,8,4),(1,5,10),(5,1,90),(7,6,18),(0,3,11)],schema=['col1','col2','col3'])
tst1 = tst.withColumn("div", (F.col('col1')/F.col('col2')).cast('int'))
tst2 = tst.withColumn("div", F.floor(F.col('col1')/F.col('col2')))

关于PySpark DataFrame Floor Division 不支持的操作数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62844721/

相关文章:

scala - 从Scala将UDF注册到SqlContext以在PySpark中使用

apache-spark - 在 PySpark 中使用 Pycuda - 未找到 nvcc

python - PySpark 在 GroupBy 之后加入

apache-spark - 将 JSON 字符串列拆分为多列

pyspark - Azure databricks dataframe 写入给出作业中止错误

apache-spark - GCP 数据处理 - java.lang.NoClassDefFoundError : org/apache/kafka/common/serialization/ByteArraySerializer

scala - Spark : Override library method

python - 一次 Spark.read() 多条路径,而不是 for 循环中的一条一条

apache-spark - Pyspark:在数据框中用 null 替换所有出现的值

apache-spark - 在PySpark中的名称之间修剪附加空格