sqlContext = SQLContext(sc)
sample=sqlContext.sql("select Name ,age ,city from user")
sample.show()
yılında dataFrame her satırda döngü yukarıdaki deyimi terminalde tüm tabloyu yazdırmak ama.
sqlContext = SQLContext(sc)
sample=sqlContext.sql("select Name ,age ,city from user")
sample.show()
yılında dataFrame her satırda döngü yukarıdaki deyimi terminalde tüm tabloyu yazdırmak ama.
Yapamazsınız. Diğer dağıtılmış veri yapılarıyla aynı olan DataFrames
, iterable değildir ve yalnızca özel üst düzey işlev ve/veya SQL yöntemleri kullanılarak erişilebilir.
Elbette collect
ait toLocalIterator
dönüştürmek ve yerel olarak
for row in df.rdd.collect():
do_something(row)
yineleme ama Spark kullanmanın tüm amacını yener ya.
Bir DataFrame nesnesindeki her bir satıra bir şeyler yapmak isterseniz, map
'u kullanın. Bu, her satırda daha fazla hesaplama yapmanıza olanak tanır. Bu, tüm veri kümesinde 0
'dan len(dataset)-1
'a döngü eşdeğeridir.
Bunun bir DataFrame ürünü değil, bir PipelinedRDD döndüreceğini unutmayın.
Özel bir işlev tanımlar ve haritayı kullanırsınız.
def customFunction(row):
return (row.name, row.age, row.city)
sample2 = sample.rdd.map(customFunction)
veya
sample2 = sample.rdd.map(lambda x: (x.name, x.age, x.city))
özel bir işlevi
sonra dataframe her satır için uygulanacaktır. Örnek2'nin bir veri çerçevesi değil, birRDD
olacağını unutmayın. Daha karmaşık hesaplamalar yapacaksanız harita gereklidir. Türetilmiş bir sütun eklemeniz gerekiyorsa,
withColumn
'u kullanarak bir dataframe'i döndürürsünüz. Python liste türetimi kullanma
sample3 = sample.withColumn('age2', sample.age + 2)
, sadece iki satır kullanarak bir liste halinde değerlerin tüm sütunu toplayabilir: Yukarıdaki örnekte
df = sqlContext.sql("show tables in default")
tableList = [x["tableName"] for x in df.rdd.collect()]
, biz 'veritabanındaki tabloların listemizi dönmek varsayılan ', ancak aynı sql() kullanılan sorguyu değiştirerek aynı uyarlanabilir.
Ya da daha kısaltılmış:
tableList = [x["tableName"] for x in sqlContext.sql("show tables in default").rdd.collect()]
Ve üç sütun sizin örneğin
biz sözlüklerde bir listesini oluşturmak ve sonra döngü için içlerinden yineleme yapabilirsiniz.tupleList = [{name:x["name"], age:x["age"], city:x["city"]}
yukarıda
sql_text = "select name, age, city from user"
tupleList = [{name:x["name"], age:x["age"], city:x["city"]}
for x in sqlContext.sql(sql_text).rdd.collect()]
for row in tupleList:
print("{} is a {} year old from {}".format(
row["name"],
row["age"],
row["city"]))
name
için
tupleList = [{'name':x["name"], 'age':x["age"], 'city':x["city"]}
, age
olmalı ve city
değişkenler ama sadece sözlüğün anahtarları değildir.
Doğru bir cevap verdiğime inanıyorum. İyileştirmek için seçim yapabilir veya geri bildirim sağlayabilir misiniz? – aaronsteers