Могу ли я изменить тип данных столбцов данных Spark, которые загружаются в SQL Server в виде таблицы?
Я пытаюсь прочитать файл Parquet из озера данных Azure, используя следующий код Pyspark.
df= sqlContext.read.format("parquet")
.option("header", "true")
.option("inferSchema", "true")
.load("adl://xyz/abc.parquet")
df = df['Id','IsDeleted']
Теперь я хотел бы загрузить этот dataframe df в виде таблицы в хранилище данных sql, используя следующий код:
df.write \
.format("com.databricks.spark.sqldw") \
.mode('overwrite') \
.option("url", sqlDwUrlSmall) \
.option("forward_spark_azure_storage_credentials", "true") \
.option("dbtable", "test111") \
.option("tempdir", tempDir) \
.save()
Это создает таблицу dbo.test111 в хранилище данных SQL с типами данных:
- Идентификатор (NVARCHAR (256), нулевой)
- IsDeleted (бит, нулевой)
Но мне нужны эти столбцы с разными типами данных, например char(255), varchar(128) в SQL Datawarehouse. Как мне это сделать при загрузке фрейма данных в SQL Dataware?
2 ответа
Я нашел способ, который может помочь вам изменить тип данных столбца, но, возможно, не смог достичь вашего желания.
df.select(col("colname").cast(DataType))
Вот блоб о том, как изменить типы столбцов в DataFrame Spark SQL.
Может быть, это может помочь вам.
Даны только поддерживаемые типы данных в Spark SQL [ https://spark.apache.org/docs/1.6.0/api/java/org/apache/spark/sql/types/package-summary.html][1]
Строковые типы будут фактически превращены в VARCHAR
с неопределенной длиной.
Spark SQL не имеет VARCHAR(n)
тип данных.
Вы должны быть в состоянии сделать что-то вроде ниже
import org.apache.spark.sql.types._
val df =
df.withColumn("Id_mod", df.Id.cast(StringType))
.withColumn("IsDeleted_mod", df.IsDeleted.cast(StringType))
.drop("Id")
.drop("IsDeleted")
.withColumnRenamed("Id_mod", "Id")
.withColumnRenamed("IsDeleted_mod", "IsDeleted")
//Replace StringType with Any supported desired type