উত্তর:
কাঁচা এসকিউএল দিয়ে আপনি ব্যবহার করতে পারেন CONCAT
:
পাইথনে
df = sqlContext.createDataFrame([("foo", 1), ("bar", 2)], ("k", "v"))
df.registerTempTable("df")
sqlContext.sql("SELECT CONCAT(k, ' ', v) FROM df")
স্কালায়
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")
স্পার্ক ০.০.০ থেকে আপনি concat
ডেটাফ্রেম এপিআই দিয়ে ফাংশন ব্যবহার করতে পারেন :
পাইথনে:
from pyspark.sql.functions import concat, col, lit
df.select(concat(col("k"), lit(" "), col("v")))
স্কালায়:
import org.apache.spark.sql.functions.{concat, lit}
df.select(concat($"k", lit(" "), $"v"))
concat_ws
প্রথম আর্গুমেন্ট হিসাবে একটি স্ট্রিং বিভাজক লাগে যা ফাংশন আছে ।
আপনি কীভাবে কাস্টম নামকরণ করতে পারেন তা এখানে
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()
দেয়,
+--------+--------+
|colname1|colname2|
+--------+--------+
| row11| row12|
| row21| row22|
+--------+--------+
একচেটিয়াভাবে নতুন কলাম তৈরি করুন:
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|
+--------+--------+-------------+
স্পার্ক স্কালায় স্ট্রিং কলামগুলি সংযুক্ত করার জন্য একটি বিকল্প ব্যবহার করছে concat
।
নাল মানগুলি পরীক্ষা করা প্রয়োজন । কারণ কলামগুলির কোনও একটি যদি নাল হয় তবে অন্য কলামগুলির একটিতেও তথ্য না থাকলেও ফলাফল নালাগ্রত হবে।
ব্যবহার concat
এবং withColumn
:
val newDf =
df.withColumn(
"NEW_COLUMN",
concat(
when(col("COL1").isNotNull, col("COL1")).otherwise(lit("null")),
when(col("COL2").isNotNull, col("COL2")).otherwise(lit("null"))))
ব্যবহার concat
এবং select
:
val newDf = df.selectExpr("concat(nvl(COL1, ''), nvl(COL2, '')) as NEW_COLUMN")
উভয় পদ্ধতির সাথে আপনার কাছে একটি NEW_COLUMN থাকবে যার মানটি কলামগুলির একত্রিতকরণ: আপনার মূল df থেকে COL1 এবং COL2।
concat_ws
পরিবর্তে ব্যবহার করেন তবে আপনি concat
NULL পরীক্ষা করা এড়াতে পারবেন।
আপনি যদি ডিএফ ব্যবহার করে এটি করতে চান তবে আপনি বিদ্যমান কলামগুলির উপর ভিত্তি করে একটি ইউডিএফ ব্যবহার করতে পারেন।
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()
স্পার্ক ২.৩ ( স্পার্ক -২২771১ ) থেকে স্পার্ক এসকিউএল কনকাটেনশন অপারেটরকে সমর্থন করে ||
।
উদাহরণ স্বরূপ;
val df = spark.sql("select _c1 || _c2 as concat_column from <table_name>")
পাইস্পার্কের জন্য এটি করার আরও একটি উপায় এখানে রয়েছে:
#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|
+------------+
v1.5 এবং উচ্চতর
একক কলামে একসাথে একাধিক ইনপুট কলাম সংযুক্ত করে। ফাংশনটি স্ট্রিং, বাইনারি এবং সুসংগত অ্যারে কলামগুলির সাথে কাজ করে।
উদাহরণ: new_df = df.select(concat(df.a, df.b, df.c))
v1.5 এবং উচ্চতর
অনুরূপ concat
তবে নির্দিষ্ট বিভাজক ব্যবহার করে।
উদাহরণ: new_df = df.select(concat_ws('-', df.col1, df.col2))
v2.4 এবং উচ্চতর
মানচিত্রগুলি সংহত করতে ব্যবহৃত, প্রদত্ত সমস্ত মানচিত্রের ইউনিয়ন প্রদান করে।
উদাহরণ: new_df = df.select(map_concat("map1", "map2"))
স্ট্রিং কনক্যাট অপারেটর ( ||
) ব্যবহার করে :
v2.3 এবং উচ্চতর
উদাহরণ: df = spark.sql("select col_a || col_b || col_c as abc from table_x")
তথ্যসূত্র: স্পার্ক এসকিএল ডক
জাভাতে আপনি একাধিক কলাম সংলগ্ন করতে এটি করতে পারেন। নমুনা কোডটি আপনাকে একটি দৃশ্য সরবরাহ করার জন্য এবং এটি আরও ভাল বোঝার জন্য কীভাবে ব্যবহার করতে হয়।
SparkSession spark = JavaSparkSessionSingleton.getInstance(rdd.context().getConf());
Dataset<Row> reducedInventory = spark.sql("select * from table_name")
.withColumn("concatenatedCol",
concat(col("col1"), lit("_"), col("col2"), lit("_"), col("col3")));
class JavaSparkSessionSingleton {
private static transient SparkSession instance = null;
public static SparkSession getInstance(SparkConf sparkConf) {
if (instance == null) {
instance = SparkSession.builder().config(sparkConf)
.getOrCreate();
}
return instance;
}
}
উপরের কোডটি কনক্যাটনেটেড কল 1, কল 2, কল 3 "_" দ্বারা বিভক্ত হয়ে "কনক্যাটেনটেড কল" নাম সহ একটি কলাম তৈরি করতে পারে।
আমাদের কাছে নীচের প্রক্রিয়া অনুসারে জাভা সিনট্যাক্স আছে কি?
val dfResults = dfSource.select(concat_ws(",",dfSource.columns.map(c => col(c)): _*))
স্কাইলকন্টেক্সট ব্যবহার করে পাইস্পার্কে এটি করার আর একটি উপায় ...
#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'))
প্রকৃতপক্ষে, কাস্টম ফাংশন বাস্তবায়নের প্রয়োজন ছাড়াই আপনার মনমুগ্ধকরণটি সম্পাদনের জন্য কিছু সুন্দর ইনবিল্ট বিমূর্ততা রয়েছে। যেহেতু আপনি স্পার্ক এসকিউএল উল্লেখ করেছেন, তাই আমি অনুমান করছি যে আপনি এটিকে স্পার্ক.এসকিউএল () এর মাধ্যমে ডিক্লেটারিটিভ কমান্ড হিসাবে পাস করার চেষ্টা করছেন। যদি তা হয় তবে আপনি এসকিউএল কমান্ডটি পাস করার মতো করে সরাসরি এগিয়ে যেতে পারেন:
SELECT CONCAT(col1, '<delimiter>', col2, ...) AS concat_column_name FROM <table_name>;
এছাড়াও, স্পার্ক ২.৩.০ থেকে, আপনি এই লাইনে কমান্ডগুলি ব্যবহার করতে পারেন:
SELECT col1 || col2 AS concat_column_name FROM <table_name>;
এর মধ্যে আপনার পছন্দসই ডিলিমিটারটি (খালি জায়গাও হতে পারে) এবং আপনি যে অস্থায়ী বা স্থায়ী টেবিলটি পড়ার চেষ্টা করছেন তা।
আমরা পাশাপাশি সিলেক্টেক্সরপ ব্যবহার করতে পারি। df1.selectExpr ("*", "উপরের (_2 || _3) নতুন হিসাবে")
lit
একটি কলাম তৈরি করে_