1

pysparkのラウンド関数がうまく動作しない場合 - new_bid列を小数点以下第2位に丸めようとするコードブロックがあります。その後、bidという名前に変更してください - 私は参考のためにpyspark.sql.functions AS funcをインポートし、その中に含まround機能使用しています:Pysparkラウンド関数で問題が発生しました

output = output.select(col("ad").alias("ad_id"), 
         col("part").alias("part_id"), 
         func.round(col("new_bid"), 2).alias("bid")) 

ここnew_bid列がfloat型である - 結果のデータフレームは2に丸められ、新たに命名さbid列を持っていません私がやろうとしているように、小数点以下はまだ小数点第8位または第9位です。

私は様々なことを試しましたが、得られたデータフレームに丸められた値を持たせることはできません。どのポインターも大変ありがとうございます!ありがとう!ここで

+0

あなたが求めている答えはまさにその答えではありませんか?はい、それを親切に受け入れる - ありがとう – desertnaut

+1

謝罪 - 町の外だったと戻ってチェックすることを忘れて - はいこれは非常に有用だったと私は何を探していた - 私は助けてくれてありがとう! – dave

答えて

2

は、いくつかのおもちゃのデータでそれを行うための方法のカップルです:

spark.version 
# u'2.2.0' 

import pyspark.sql.functions as func 

df = spark.createDataFrame(
     [(0.0, 0.2, 3.45631), 
     (0.4, 1.4, 2.82945), 
     (0.5, 1.9, 7.76261), 
     (0.6, 0.9, 2.76790), 
     (1.2, 1.0, 9.87984)], 
     ["col1", "col2", "col3"]) 

df.show() 
# +----+----+-------+ 
# |col1|col2| col3| 
# +----+----+-------+ 
# | 0.0| 0.2|3.45631| 
# | 0.4| 1.4|2.82945| 
# | 0.5| 1.9|7.76261| 
# | 0.6| 0.9| 2.7679| 
# | 1.2| 1.0|9.87984| 
# +----+----+-------+ 

# round 'col3' in a new column: 
df2 = df.withColumn("col4", func.round(df["col3"], 2)).withColumnRenamed("col4","new_col3") 
df2.show() 
# +----+----+-------+--------+ 
# |col1|col2| col3|new_col3| 
# +----+----+-------+--------+ 
# | 0.0| 0.2|3.45631| 3.46| 
# | 0.4| 1.4|2.82945| 2.83| 
# | 0.5| 1.9|7.76261| 7.76| 
# | 0.6| 0.9| 2.7679| 2.77| 
# | 1.2| 1.0|9.87984| 9.88| 
# +----+----+-------+--------+ 

# round & replace existing 'col3': 
df3 = df.withColumn("col3", func.round(df["col3"], 2)) 
df3.show() 
# +----+----+----+ 
# |col1|col2|col3| 
# +----+----+----+ 
# | 0.0| 0.2|3.46| 
# | 0.4| 1.4|2.83| 
# | 0.5| 1.9|7.76| 
# | 0.6| 0.9|2.77| 
# | 1.2| 1.0|9.88| 
# +----+----+----+ 

それは個人的な好みですが、私はcolaliasどちらの楽しいではないよ - 私はwithColumnwithColumnRenamedを好みます代わりに。それにもかかわらず、あなたはselectcolに固執したい場合は、ここにあなたがあなた自身のコードスニペットを適応する方法である。

from pyspark.sql.functions import col 

df4 = df.select(col("col1").alias("new_col1"), 
       col("col2").alias("new_col2"), 
       func.round(df["col3"],2).alias("new_col3")) 
df4.show() 
# +--------+--------+--------+ 
# |new_col1|new_col2|new_col3| 
# +--------+--------+--------+ 
# |  0.0|  0.2| 3.46| 
# |  0.4|  1.4| 2.83| 
# |  0.5|  1.9| 7.76| 
# |  0.6|  0.9| 2.77| 
# |  1.2|  1.0| 9.88| 
# +--------+--------+--------+ 

あなたの質問にいくつかのサンプルデータと望ましい結果を提供するために、常に良い考えですPS関連する輸入品については、How do I ask a good question?を参照してください。さらに、答えが役に立つ場合は、を受け入れることを忘れないでください。 ...

関連する問題