web-dev-qa-db-ja.com

Pysparkは標準リストをデータフレームに変換します

ケースは本当に簡単です。次のコードでpythonリストをデータフレームに変換する必要があります

from pyspark.sql.types import StructType
from pyspark.sql.types import StructField
from pyspark.sql.types import StringType, IntegerType

schema = StructType([StructField("value", IntegerType(), True)])
my_list = [1, 2, 3, 4]
rdd = sc.parallelize(my_list)
df = sqlContext.createDataFrame(rdd, schema)

df.show()

次のエラーで失敗しました:

    raise TypeError("StructType can not accept object %r in type %s" % (obj, type(obj)))
TypeError: StructType can not accept object 1 in type <class 'int'>
17
seiya

また、このソリューションは、使用するコードが少なく、RDDへのシリアル化を避け、理解しやすいアプローチです。

from pyspark.sql.types import IntegerType

# notice the variable name (more below)
mylist = [1, 2, 3, 4]

# notice the parens after the type name
spark.createDataFrame(mylist, IntegerType()).show()

注:変数の名前についてlistlistという用語はPython組み込み関数であるため、組み込み名を名前/ラベルとして使用しないことを強くお勧めしますlist()関数のようなものを上書きしてしまうためです。速くて汚いものをプロトタイピングするとき、多くの人々はmylistのようなものを使用します。

15
E. Ducateme

以下のコードをご覧ください:

    from pyspark.sql import Row
    li=[1,2,3,4]
    rdd1 = sc.parallelize(li)
    row_rdd = rdd1.map(lambda x: Row(x))
    df=sqlContext.createDataFrame(row_rdd,['numbers']).show()

df

+-------+
|numbers|
+-------+
|      1|
|      2|
|      3|
|      4|
+-------+
7
user15051990