sim*_*ple 1 python pyspark spark-dataframe
我有一个具有以下类型的数据框:
>>> mydf.printSchema()
root
|-- protocol: string (nullable = true)
|-- source_port: long (nullable = true)
|-- bytes: long (nullable = true)
Run Code Online (Sandbox Code Playgroud)
当我尝试像这样聚合它时:
df_agg = mydf.groupBy('protocol').agg(sum('bytes'))
Run Code Online (Sandbox Code Playgroud)
有人告诉我:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Run Code Online (Sandbox Code Playgroud)
现在,这对我来说没有意义,因为我看到类型适合聚合,printSchema()如上所示。
因此,我尝试将其转换为整数以防万一:
mydf_converted = mydf.withColumn("converted",mydf["bytes_out"].cast(IntegerType()).alias("bytes_converted"))
Run Code Online (Sandbox Code Playgroud)
但仍然失败:
my_df_agg_converted = mydf_converted.groupBy('protocol').agg(sum('converted'))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Run Code Online (Sandbox Code Playgroud)
如何解决?我查看了这个问题,但该修复程序根本没有帮助我 - 同样的问题: PySpark DataFrame 上的 Sum 操作在类型正常时给出 TypeError
MaF*_*aFF 10
Python 在它的sum函数和sum您要使用的 pyspark 聚合函数之间感到困惑。所以你基本上是将一个字符串传递'converted'给 python sum 函数。
尝试functions使用别名加载 pyspark :
import pyspark.sql.functions as psf
my_df_agg_converted = mydf_converted.groupBy('protocol').agg(psf.sum('converted'))
Run Code Online (Sandbox Code Playgroud)
这将告诉它使用pyspark函数而不是内置函数。
| 归档时间: |
|
| 查看次数: |
2102 次 |
| 最近记录: |