2017-07-30 9 views
3

私はdatabricks/pysparkの使用を開始しました。私はpython/spark 2.1を使っています。私はテーブルにデータをアップロードしました。このテーブルは、文字列でいっぱいの単一の列です。私は、列の各要素にマッピング関数を適用したいと考えています。私は、データフレームに表をロードする:DataFrameへのマッピング機能の適用

df = spark.table("mynewtable") 

私が見ることができる唯一の方法他の人が言っていたが、データを表示するために戻ってデータフレームに、マッピング関数を適用するとしRDDに変換することでした。私がやりたいすべてがちょうどテーブルの私のデータにマップ機能の任意の並べ替えを適用している

df2 = df.select("_c0").rdd.flatMap(lambda x: x.append("anything")).toDF() 

:しかし、これは、ジョブが中断期の障害をスローします。 例えば、列内の各文字列に何かを追加するか、charに対して分割を行い、それをデータフレームに入れて、.show()または表示することができます。

答えて

4

あなたがすることはできません。

  • tupleかは全くappendメソッド
  • append(場合がありません:

    • 使用flatMapそれはので、あなたはappendを使用することはできません
    • を平らにしますので、コレクション上に存在する)がサイドeに対して実行されるffectsと私はwithColumnを使用するNone

を返します。

df.withColumn("foo", lit("anything")) 

しかしmapは同様に動作するはずです:

df.select("_c0").rdd.flatMap(lambda x: x + ("anything",)).toDF() 

編集(コメントを与えられた):

はおそらくudf

from pyspark.sql.functions import udf 

def iplookup(s): 
    return ... # Some lookup logic 

iplookup_udf = udf(iplookup) 

df.withColumn("foo", iplookup_udf("c0")) 

デフォルトの戻り値の型がStringTypeありたいので、あなたが何かをしたい場合は、他のあなたはそれを調整する必要があります。

関連する問題