W jaki sposób łączymy 2 kolumny w ramce danych? Czy jest jakaś funkcja w iskrze sql, której możemy użyć do konkatowania 2 kolumn w tabeli df.Łączenie kolumn w ramce informacyjnej iskry Apache
Odpowiedz
z surowego SQL można używać CONCAT
:
W Pythonie
df = sqlContext.createDataFrame([("foo", 1), ("bar", 2)], ("k", "v")) df.registerTempTable("df") sqlContext.sql("SELECT CONCAT(k, ' ', v) FROM df")
W Scala
import sqlContext.implicits._ val df = sc.parallelize(Seq(("foo", 1), ("bar", 2))).toDF("k", "v") df.registerTempTable("df") sqlContext.sql("SELECT CONCAT(k, ' ', v) FROM df")
Od Spark 1.5.0 można użyć concat
funkcja wit H DataFrame API
W Pythonie
from pyspark.sql.functions import concat, col, lit df.select(concat(col("k"), lit(" "), col("v")))
Scala:
import org.apache.spark.sql.functions.{concat, lit} df.select(concat($"k", lit(" "), $"v"))
Istnieje również concat_ws
funkcja, która bierze separator ciągu jako pierwszy argument.
Co się stanie, jeśli dataFrame ma wartość pustą? jak to df = sqlContext.createDataFrame ([("foo", 1), ("bar", 2), ("check", null)], ("k", "v")) –
@TarunKumar Czy masz na myśli coś w stylu [this] (http://stackoverflow.com/a/33152113/1560062)? – zero323
to jest to, co chciałem. dziękuje –
Jeśli chcesz zrobić to za pomocą DF, możesz użyć udf, aby dodać nową kolumnę na podstawie istniejących kolumn.
val sqlContext = new SQLContext(sc)
case class MyDf(col1: String, col2: String)
//here is our dataframe
val df = sqlContext.createDataFrame(sc.parallelize(
Array(MyDf("A", "B"), MyDf("C", "D"), MyDf("E", "F"))
))
//Define a udf to concatenate two passed in string values
val getConcatenated = udf((first: String, second: String) => { first + " " + second })
//use withColumn method to add a new column called newColName
df.withColumn("newColName", getConcatenated($"col1", $"col2")).select("newColName", "col1", "col2").show()
Czy istnieje sposób dynamicznego łączenia kolumn z wejściowego łańcucha? – ashK
To nie jest optymalne, w porównaniu do DataFrame.concat_ws, ponieważ Spark nie optymalizuje bardzo udfs/w ogóle. Oczywiście w momencie, gdy potrzebujesz niestandardowej logiki w swojej konkatenacji, nie będziesz w stanie uniknąć udf. –
Oto kolejny sposób to zrobić za pyspark:
#import concat and lit functions from pyspark.sql.functions
from pyspark.sql.functions import concat, lit
#Create your data frame
countryDF = sqlContext.createDataFrame([('Ethiopia',), ('Kenya',), ('Uganda',), ('Rwanda',)], ['East Africa'])
#Use select, concat, and lit functions to do the concatenation
personDF = countryDF.select(concat(countryDF['East Africa'], lit('n')).alias('East African'))
#Show the new data frame
personDF.show()
----------RESULT-------------------------
84
+------------+
|East African|
+------------+
| Ethiopian|
| Kenyan|
| Ugandan|
| Rwandan|
+------------+
Innym sposobem, aby to zrobić w pySpark użyciu SqlContext ...
#Suppose we have a dataframe:
df = sqlContext.createDataFrame([('row1_1','row1_2')], ['colname1', 'colname2'])
# Now we can concatenate columns and assign the new column a name
df = df.select(concat(df.colname1, df.colname2).alias('joined_colname'))
Oto jak można zrobić niestandardowe nazewnictwo:
import pyspark
from pyspark.sql import functions as sf
sc = pyspark.SparkContext()
sqlc = pyspark.SQLContext(sc)
df = sqlc.createDataFrame([('row11','row12'), ('row21','row22')], ['colname1', 'colname2'])
df.show()
daje,
+--------+--------+
|colname1|colname2|
+--------+--------+
| row11| row12|
| row21| row22|
+--------+--------+
utworzyć nową kolumnę przez złączenie:
df = df.withColumn('joined_column',
sf.concat(sf.col('colname1'),sf.lit('_'), sf.col('colname2')))
df.show()
+--------+--------+-------------+
|colname1|colname2|joined_column|
+--------+--------+-------------+
| row11| row12| row11_row12|
| row21| row22| row21_row22|
+--------+--------+-------------+
Dlaczego nazywacie 'sf.lit ('_')' a nie tylko ''_''? –
'świeci' tworzy kolumnę' _' – muon
Oto propozycja dla kiedy nie znasz numeru lub nazwy kolumn w Dataframe.
val dfResults = dfSource.select(concat_ws(",",dfSource.columns.map(c => col(c)): _*))
- 1. Upuszczanie kolumn w ramce danych
- 2. Błąd iskry Apache: nie znaleziono: wartość sqlContext
- 3. Identyfikowanie duplikatów kolumn w ramce danych R
- 4. iteracyjnego niektórych kolumn w ramce danych
- 5. Ustawianie kolejności kolumn w ramce danych pandy
- 6. Łączenie dwóch kolumn w jeden w R
- 7. Aktualizowanie przez łączenie kolumn w PostgreSQL
- 8. pandy: łączenie dwóch kolumn w DataFrame
- 9. Łączenie słowników tego samego klucza w ramce danych w pandach
- 10. Upuszczanie listy, aby wybrać wiele kolumn z ramki danych iskry
- 11. Wklej razem każdą parę kolumn w ramce danych w R?
- 12. Sprawdzanie identycznych kolumn w ramce danych w R
- 13. Obliczyć różnicę parami względem określonych kolumn w ramce danych
- 14. Pomnożenie wszystkich kolumn w ramce danych Pandy razem
- 15. Jak uzyskać klasy wszystkich kolumn w ramce danych?
- 16. Znajdź średnią każdej z trzech kolumn w ramce danych Pandy
- 17. Zmiana położenia kolumn w ramce danych bez całkowitej zmiany przypisania
- 18. Jak usunąć "." od nazw kolumn w ramce danych?
- 19. pandy konwertują łańcuchy znaków do wielu kolumn w ramce danych
- 20. Obliczanie średniej z dwóch kolumn w ramce danych
- 21. Extjs 4 - Łączenie dwóch kolumn siatki
- 22. Łączenie dwóch tabel z inną liczbą kolumn
- 23. WPF Łączenie Datagrid i wyświetlanie kolumn
- 24. Łączenie trzech różnych kolumn w datę w R
- 25. jaki jest szybki sposób upuszczania kolumn w ramce danych pandy z listy nazw kolumn
- 26. Czy łączenie współdzielonych RDD powoduje przetasowanie w Apache Spark?
- 27. Najlepszy sposób na łączenie wielu kolumn w siatkę/listę WPF?
- 28. Łączenie danych.ramki sumujące wartości identycznych kolumn w R
- 29. Profilowanie iskry Scala
- 30. Najlepszy sposób wysyłania logu apache-iskry do redis/logstash w klastrze Amazon EMR
Masz tu kilka odpowiedzi, prosząc o akceptację;) – user8371915