7 pyspark
我有两个数据框,其架构如下:books_with_10_ratings_or_more_with_title:
root
|-- ISBN: string (nullable = true)
|-- count: long (nullable = false)
|-- average: double (nullable = true)
Run Code Online (Sandbox Code Playgroud)
和books_df:
root
|-- ISBN: string (nullable = true)
|-- count: long (nullable = false)
|-- average: double (nullable = true)
Run Code Online (Sandbox Code Playgroud)
我试图将它们连接在一起并将评级(即平均值)更改为浮动
books_with_10_ratings_or_more_with_title = books_with_10_ratings_or_more.join(books_df, 'ISBN').select('ISBN', 'Book-Title', 'Book-Author', 'Year', books_with_10_ratings_or_more.average.cast(float))
Run Code Online (Sandbox Code Playgroud)
所以我可以使用以下代码对其进行舍入,它会引发错误:
代码有什么问题,我该如何解决?非常感谢。
你可以这样做
books_with_10_ratings_or_more.average.cast('float')
Run Code Online (Sandbox Code Playgroud)
或者
from pyspark.sql.types import FloatType
books_with_10_ratings_or_more.average.cast(FloatType())
Run Code Online (Sandbox Code Playgroud)
官方API文档中有一个例子
编辑
所以你试图cast因为round抱怨某事不存在float。您不必强制转换,因为您的三位数四舍五入与FloatType或没有区别DoubleType。
您round将无法工作,因为您正在使用 python 中的函数。您需要从pyspark.sql.functions. 例如,
from pyspark.sql.types import Row
from pyspark.sql.functions import col, round
df = sc.parallelize([
Row(isbn=1, count=1, average=10.6666666),
Row(isbn=2, count=1, average=11.1111111)
]).toDF()
df.select(round(col('average'), 3).alias('average')).collect()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19465 次 |
| 最近记录: |