business_df
スキーマのデータフレーム()があります:
|-- business_id: string (nullable = true)
|-- categories: array (nullable = true)
| |-- element: string (containsNull = true)
|-- city: string (nullable = true)
|-- full_address: string (nullable = true)
|-- hours: struct (nullable = true)
|-- name: string (nullable = true)
列new_df
の値に'name'
空白が含まれないように、新しいデータフレーム()を作成したいと思います。
私のコードは:
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql import HiveContext
from pyspark.sql.functions import UserDefinedFunction
from pyspark.sql.types import StringType
udf = UserDefinedFunction(lambda x: x.replace(' ', ''), StringType())
new_df = business_df.select(*[udf(column).alias(name) if column == name else column for column in business_df.columns])
new_df.registerTempTable("vegas")
new_df.printSchema()
vegas_business = sqlContext.sql("SELECT stars, name from vegas limit 10").collect()
私はこのエラーを受け取り続けます:
NameError: global name 'replace' is not defined
このコードの何が問題になっていますか?
あなたが説明した問題は提供されたコードでは再現できませんが、PythonUDFs
を使用してこのような単純なタスクを処理することはかなり非効率的です。テキストからスペースを削除したい場合は、次を使用してregexp_replace
ください。
from pyspark.sql.functions import regexp_replace, col
df = sc.parallelize([
(1, "foo bar"), (2, "foobar "), (3, " ")
]).toDF(["k", "v"])
df.select(regexp_replace(col("v"), " ", ""))
空の行を正規化する場合は、次を使用しますtrim
。
from pyspark.sql.functions import trim
df.select(trim(col("v")))
先頭/末尾のスペースを維持したい場合は、次のように調整できますregexp_replace
。
df.select(regexp_replace(col("v"), "^\s+$", ""))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加