如何将SQL查询的结果从Databricks导出到Azure Data Lake Store

时间:2019-01-05 16:07:54

标签: python pyspark databricks azure-databricks

我试图将结果从Databricks中的spark.sql查询导出到Azure Data Lake Store-ADLS中的文件夹

我要查询的表也位于ADLS中。

我已经使用以下命令从Databricks访问了ADLS中的文件:

// private utilities
/** Validates the position and returns it as a node. */

private Node<E> validate(Position<E> p) throws IllegalArgumentException { 

if (!(p instanceof Node)) throw new IllegalArgumentException("Invalid p");

Node<E> node = (Node<E>) p; // safe cast

if (node.getNext( ) == null) // convention for defunct node
    throw new IllegalArgumentException("p is no longer in the list");

return node;
}

我正在使用以下命令查询表:

base = spark.read.csv("adl://carlslake.azuredatalakestore.net/landing/",inferSchema=True,header=True)
base.createOrReplaceTempView('basetable')

然后我尝试使用以下方法将结果导出到Azure中的文件夹:

try:
  dataframe = spark.sql("select * from basetable where LOAD_ID = 1199")
except:
  print("Exception occurred 1166")
else:
  print("Table Load_id 1166")

这里有两个奇怪的问题:

  1. 我已指定要查询load_id = 1199,尽管没有load_id = 1199,查询仍然成功。

  2. 如果第一个“ try”语句失败,我希望第二个“ try”语句失败,但是第二个try语句会考虑第一个“ try”语句。

有人可以让我知道我要去哪里了吗

可以在这里查看表格 thetable

1 个答案:

答案 0 :(得分:0)

只是想我会和你分享答案;

try:
  dataframe = spark.sql("select * from basetable where LOAD_ID = 1166")
except:
  print("Exception occurred 1166")
if dataframe.count() == 0:
  print("No data rows 1166")
else:
  dataframe.coalesce(1).write.option("header","true").mode("overwrite").csv("adl://carlslake.azuredatalakestore.net/jfolder2/outputfiles/")
  rename_file("adl://carlslake.azuredatalakestore.net/jfolder2/outputfiles", "adl://carlslake.azuredatalakestore.net/landing/RAW", "csv", "Delta_LoyaltyAccount_merged")

我希望它也对您有用。